Интеграция DI-контейнера в доменный уровень. Доменные события
После статьи: http://www.udidahan.com/2009/06/14/domain-events-salvation/ мы видим, что DomainEvents
реализация использует DI-контейнер
public static IContainer Container { get; set; }
а потом
if(Container != null) {
foreach(var handler in Container.ResolveAll<Handles<T>>()) handler.Handle(args);
}
Должен ли я интегрировать DI-контейнер в одну сборку, я сохраняю доменные объекты или могу вывести / абстрагировать Container.ResolveAll<Handles<T>>()
? (В моем предыдущем опыте я положил все DI-related
вещи внутри global.asax.cs
).
Технически я знаком только с контейнером Ninject DI, но, вероятно, пойму концепцию, поэтому ваши советы / иллюстрации будут оценены.
Спасибо!
1 ответ
Нет, это не обязательно. Я бы сделал DomainEvents и его методы нестатичными и использовал бы контейнер для его создания. Приличный контейнер создаст и инициализирует дескрипторы и их зависимости и позволит вам вызывать обработчики событий без какой-либо ссылки на контейнер.
Единственный улов - это регистрация обработчиков событий. Для этого я использую Bootstrapper для вызова экземпляров IUnityRegistration и настройки UNITY. Я начал использовать CommonServiceLocator для уменьшения зависимостей. И еще недавно я перешел на MEF, чтобы избавиться от всех классов регистрации.