использование Autofac в методе Factory - PullRequest
1 голос
/ 28 июля 2011

Я немного запутался. У меня есть фрагмент кода на domainevents, где `

public class StructureMapDomainEventHandlerFactory : IDomainEventHandlerFactory
{
    public IEnumerable<IDomainEventHandler<T>> GetDomainEventHandlersFor<T>
                                           (T domainEvent) where T : IDomainEvent
        return ObjectFactory.GetAllInstances<IDomainEventHandler<T>>();
}

, где эксплуатируется StructureMap.Я только начал использовать DI, используя Autofac, как это должно быть реализовано в Autofac.Поскольку понятия «статический класс» не существует.

В целом правильный ли этот подход?какой смысл использовать DI в классе Factory, было бы неплохо ссылаться на него где-то еще?

1 Ответ

2 голосов
/ 28 июля 2011

Этот конкретный пример фактически предоставлен для вас 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 . Класс, который передает события обработчикам, можно найти здесь .

...