关注文章:http://www.udidahan.com/2009/06/14/domain-events-salvation/
我们可以看到DomainEvents
实现使用DI容器
public static IContainer Container { get; set; }
然后
if(Container != null) {
foreach(var handler in Container.ResolveAll<Handles<T>>()) handler.Handle(args);
}
我是否应该在同一个程序集中集成DI容器来存储域对象,还是可以外部化/抽象出Container.ResolveAll<Handles<T>>()
? (在我之前的经历中,我将所有DI-related
内容放在global.asax.cs
)中。
从技术上讲,我只熟悉Ninject DI容器,但可能会理解这个概念,因此您的建议/插图会受到赞赏。
谢谢!
答案 0 :(得分:2)
不,没有必要。我将DomainEvents及其方法设置为非静态的,并使用容器来创建它。一个像样的容器将创建并初始化Handles及其依赖项,并允许您在不引用容器的情况下调用事件处理程序。
唯一的问题是事件处理程序的注册。为此,我使用Bootstrapper来调用IUnityRegistration的实例并配置UNITY。我开始使用CommonServiceLocator来减少依赖关系。而且最近,我转而使用MEF来一起摆脱注册课程。