Интеграция 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, чтобы избавиться от всех классов регистрации.

Другие вопросы по тегам