Я пытаюсь внедрить события домена в свою систему, но я застрял. Я использую SimpleInjector, и я думаю, что чего-то не хватает.Простой инжектор с событиями домена
домена Событие:
public static class DomainEvent
{
public static IEventDispatcher Dispatcher { get; set; }
public static void Raise<T>(T @event) where T : IDomainEvent
{
Dispatcher.Dispatch(@event);
}
}
SimpleInjectorEventDispatcher
public class SimpleInjectorEventDispatcher : IEventDispatcher
{
private readonly Container container;
public SimpleInjectorEventDispatcher(Container container)
{
this.container = container;
}
public void Dispatch<TEvent>(TEvent eventToDispatch) where TEvent : IDomainEvent
{
var handlerType = typeof(IDomainHandler<>).MakeGenericType(eventToDispatch.GetType());
var handlers = this.container.GetAllInstances(handlerType);
foreach (dynamic handler in handlers)
{
handler.HandleEvent((dynamic)eventToDispatch);
}
}
}
SimpleInjector
container.Register<IEventDispatcher, SimpleInjectorEventDispatcher>();
IEventDispatcher грузоотправитель всегда нуль. Как я могу убедиться, что он правильно инициализирован?
Спасибо за подробный ответ! Я возьму ваш совет и поставлю статический класс. Означает ли это, что для всех моих объектов потребуется конструктор, принимающий IEventDispatcher? – Wekslie
Сущности? Нет. Сущности не должны получать свои зависимости, используя инжекцию конструктора. Если вы хотите применить DDD, вы должны использовать метод Injection, то есть метод сущности, который фактически использует зависимость, должен требовать его посредством своего метода. – Steven
Еще раз спасибо! Другой связанный с этим вопрос: SimpleInjectorEventDispatcher имеет поле Контейнер. Как я могу установить это поле для использования контейнера из моей SimpleInjectorConfiguration? – Wekslie