Этот конкретный пример фактически предоставлен для вас OOB. Просто возьмите зависимость от IEnumerable<IDomainEventHandler<>>
и Autofac предоставит вам коллекцию:
public class ClientClass
{
public ClientClass(IEnumerable<IDomainEventHandler<OfSomeType>> eventHandlers)
{
}
}
Обновление : вот пример класса фабрики, который может включать некоторую логику в решении служб из контейнера:
public class AutofacDomainEventHandlerFactory : IDomainEventHandlerFactory
{
private readonly IComponentContext _context;
public AutofacDomainEventHandlerFactory(IComponentContext context)
{
_context = context;
}
public IEnumerable<IDomainEventHandler<T>> GetDomainEventHandlersFor<T>
(T domainEvent) where T : IDomainEvent
{
return _context.Resolve<IEnumerable<IDomainEventHandler<T>>>();
}
}
Тем не менее, я призываю вас изучить возможности использования строго типизированных метаданных в Autofac . «Помечая» службы метаданными, фабричные классы могут выполнять расширенную логику только путем изучения метаданных и, таким образом, как можно меньше зависеть от фактической используемой среды.
Обновление 2 : благодаря @Nicholas, вот превосходный примерный подход к событиям в домене с использованием Autofac . Класс, который передает события обработчикам, можно найти здесь .