Dependency injection 在工厂中使用Autofac方法

Dependency injection 在工厂中使用Autofac方法,dependency-injection,autofac,factories,Dependency Injection,Autofac,Factories,我有点困惑我有一个关于domainevents的片段` public class StructureMapDomainEventHandlerFactory : IDomainEventHandlerFactory { public IEnumerable<IDomainEventHandler<T>> GetDomainEventHandlersFor<T> (T

我有点困惑我有一个关于domainevents的片段`

public class StructureMapDomainEventHandlerFactory : IDomainEventHandlerFactory
{
    public IEnumerable<IDomainEventHandler<T>> GetDomainEventHandlersFor<T>
                                           (T domainEvent) where T : IDomainEvent
        return ObjectFactory.GetAllInstances<IDomainEventHandler<T>>();
}
公共类结构MapDomainEventHandlerFactory:IDomainEventHandlerFactory
{
公共IEnumerable GetDomainEventHandlers for
(T domainEvent)其中T:IDomainEvent
返回ObjectFactory.GetAllInstances();
}
其中StructureMap被利用。我刚刚开始使用Autofac进行DI,这应该如何在Autofac中实现。因为没有静态类的概念


总的来说,这种方法正确吗?在Factory类中使用DI的意义是什么?直接在其他地方引用DI是不好的?

这个特定示例实际上是为OOB提供的。只需依赖于
IEnumerable
,Autofac将为您提供该系列:

public class ClientClass
{
     public ClientClass(IEnumerable<IDomainEventHandler<OfSomeType>> eventHandlers)
     {
     }
}
public类ClientClass
{
公共客户端类(IEnumerable 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>>>();
    }
}
公共类AutofacDomainEventHandlerFactory:IDomainEventHandlerFactory
{
私有只读IComponentContext_context;
公共AutofacDomainEventHandlerFactory(IComponentContext上下文)
{
_上下文=上下文;
}
公共IEnumerable GetDomainEventHandlers for
(T domainEvent)其中T:IDomainEvent
{
返回_context.Resolve();
}
}
也就是说,我鼓励您探索使用的可能性。通过使用元数据“标记”服务,工厂类只能通过检查元数据来执行广泛的逻辑,从而尽可能少地依赖于实际使用的框架


更新2:感谢@Nicholas,这里有一个极好的例子。可以找到将事件传播到处理程序的类。

ok,谢谢。然而,工厂类与di框架之间的关系是什么?我们应该如何结合使用它。我们已经阅读了autofac中有关代理工厂的一些资料,但是如果逻辑很复杂,该怎么办?依我看,工厂类介于di和业务逻辑之间。有时,我们需要围绕解决方案的特定逻辑。这些工厂肯定会绑定到框架(如StructureMap示例所示),与Autofac没有什么不同。我将更新我的示例,以显示如何使factory类与容器交互。这里有一个完整的/可执行的示例,显示了与Autofac的域事件:。完成这个角色的具体类是。啊,非常好和干净的示例应用程序!感谢分享:)尼古拉斯,我喜欢你编写iocdevday示例的方式。请不要介意我经常提出的问题,但是,是否有任何来源可供我参考,以指导您在构建ddd域事件时所采用的方法。非常感谢。