【发布时间】:2015-08-20 08:04:41
【问题描述】:
我正在使用 Simple Injector,并且刚刚从 v2 更新到 v3。 我正在使用 DI 容器将关联的事件处理程序解析为事件。
所有事件处理程序都实现接口IDomainEventHandler,所有事件都实现IDomainEvent。
EventHandlers 已注册:
container.Register(typeof(IDomainEventHandler<>),
new[] { typeof(IDomainEventHandler).Assembly });
我像这样收集某个事件的所有处理程序:
public void Dispatch<TDomainEvent>(TDomainEvent domainEvent)
where TDomainEvent : IDomainEvent
{
var eventHandlers =
_dependencyResolver.GetAllInstances<IDomainEventHandler<TDomainEvent>>();
foreach (var domainEventHandler in eventHandlers)
domainEventHandler.Handle(domainEvent);
}
我有一个通用事件处理程序,它处理所有实现IDomainEvent 接口的事件。它是这样定义的:
public class EventStoreDomainEventHandler : IDomainEventHandler<IDomainEvent>
{
public void Handle(IDomainEvent domainEvent)
{ ... }
}
当我尝试从实现 IDomainEvent 接口的某个事件的 DI 容器中获取所有实例时,我没有收到 EventStoreDomainEventhandler 的实例。
有没有办法注册和获取一个类型的所有处理程序,以及与该类型实现的接口关联的所有处理程序?
希望它有意义:o)
亲切的问候 弗雷德里克
【问题讨论】:
-
我假设您的真实注册使用的是
RegisterCollection?
标签: c# dependency-injection simple-injector