在域层中集成DI容器。域事件

时间:2012-05-04 07:35:12

标签: c# asp.net-mvc dependency-injection domain-driven-design domain-events

关注文章: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容器,但可能会理解这个概念,因此您的建议/插图会受到赞赏。

谢谢!

1 个答案:

答案 0 :(得分:2)

不,没有必要。我将DomainEvents及其方法设置为非静态的,并使用容器来创建它。一个像样的容器将创建并初始化Handles及其依赖项,并允许您在不引用容器的情况下调用事件处理程序。

唯一的问题是事件处理程序的注册。为此,我使用Bootstrapper来调用IUnityRegistration的实例并配置UNITY。我开始使用CommonServiceLocator来减少依赖关系。而且最近,我转而使用MEF来一起摆脱注册课程。