#c# #dependency-injection #unity-container
#c# #внедрение зависимостей #unity-контейнер
Вопрос:
Я пытаюсь понять, почему / когда я буду использовать метод наращивания контейнера Unity. Если у меня есть следующее:
[TestInitialize]
public void SetupEnvironment()
{
var container = new UnityContainer();
container.RegisterType<ILocalizingKeyHolder, FeeTypeKeyHolder>(
typeof(FeeType).Name);
var keyHolderFactory = new UnityLocalizingKeyHolderFactory(container);
var ctx = new TspDbContext(keyHolderFactory);
...
}
И я вызываю keyHolderFactory в моем DAL, когда я материализую объект через EF:
public override void OnObjectMaterialized(object entity)
{
var localizableEntity = (entity as ILocalizableEntity);
if (localizableEntity != null)
{
this.KeyHolderFactory.AttachKeyHolder(localizableEntity);
}
}
И keyHolderFactory реализован следующим образом:
public class UnityLocalizingKeyHolderFactory : ILocalizingKeyHolderFactory
{
private UnityContainer Container { get; set; }
public UnityLocalizingKeyHolderFactory(UnityContainer container)
{
this.Container = container;
}
public void AttachKeyHolder(ILocalizableEntity localizableEntity)
{
localizableEntity.KeyHolder = Container.Resolve<ILocalizingKeyHolder>(
localizableEntity.GetType().Name);
localizableEntity.UpdateLocalizingKey();
}
}
Я действительно не вижу, какая польза от использования BuildUp для внедрения LocalizingKeyHolder в объект?
Это
localizableEntity.KeyHolder =
Container.Resolve<ILocalizingKeyHolder>(localizableEntity.GetType().Name);
кажется достаточно простым. Итак:
- Является ли BuildUp просто формой синтаксического сахара, при которой, если бы у меня было несколько свойств для разрешения типов, я мог бы просто использовать одну строку кода, чтобы это произошло, вместо того, чтобы разрешать один раз для каждого свойства?
- Должен ли я добавлять атрибут зависимости к каждому свойству, которое я хочу создать?
- Могу ли я использовать именованные регистрации с BuildUp?
- Какие еще преимущества есть в использовании Buildup?
Комментарии:
1. Использование BuildUp для подключения объектов, не созданных контейнером
2. @George — Спасибо. Я понимаю это, но тогда зачем вообще его использовать, поскольку мне все равно нужно передать его в контейнер, что еще для меня делает BuildUp, чего я не сделал выше?