在工厂方法中使用 Autofac
我有点困惑,我有一个关于领域事件的片段,其中`
public class StructureMapDomainEventHandlerFactory : IDomainEventHandlerFactory
{
public IEnumerable<IDomainEventHandler<T>> GetDomainEventHandlersFor<T>
(T domainEvent) where T : IDomainEvent
return ObjectFactory.GetAllInstances<IDomainEventHandler<T>>();
}
其中 StructureMap 被利用。我刚刚开始使用 Autofac 进行 DI,这应该如何在 Autofac 中实现。因为没有静态类的概念。
一般来说,这种方法正确吗?在 Factory 类中使用 DI 的意义何在?直接在其他地方引用它不是很好吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个特定的示例实际上是为您提供的 OOB。只需依赖
IEnumerable>
,Autofac 就会为您提供该集合:更新:这是一个工厂类的示例,其中可能包含一些逻辑围绕从容器解析服务:
也就是说,我鼓励您探索使用 Autofac 中的强类型元数据。通过使用元数据“标记”服务,工厂类只需检查元数据即可执行大量逻辑,从而尽可能减少对所使用的实际框架的依赖。
更新 2:感谢@Nicholas,这是一个出色的使用 Autofac 处理域事件的示例方法。将事件传播到处理程序的类可以在此处找到。
This particular example is actually provided for you OOB. Just take a dependency on
IEnumerable<IDomainEventHandler<>>
and Autofac will serve the collection to you:Update: here's an example of a factory class that could include some logic around resolving services from a container:
That said, I encourage you to explore the possibilities of using strongly-typed metadata in Autofac. By "tagging" services with metadata, factory classes can do extensive logic only by examining the metadata and thus have as little as possible dependency on the actual framework used.
Update 2: thanks to @Nicholas, here's an excellent sample approach to domain events using Autofac. The class that propagate events to handlers can be found here.