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

本文关键字:容器 事件 DI 集成 | 更新日期: 2023-09-27 18:33:04

在文章后面: http://www.udidahan.com/2009/06/14/domain-events-salvation/我们可以看到DomainEvents implemantation 使用 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>>()外部化/抽象化?(根据我以前的经验,我把所有的东西都放在global.asax.cs里面DI-related)。

从技术上讲,我只熟悉 Ninject DI 容器,但可能会理解这个概念,因此感谢您的建议/插图。

谢谢!

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

不,没有必要。我会使 DomainEvents 及其方法成为非静态的,并使用容器来创建它。一个体面的容器将创建和初始化句柄及其依赖项,并允许您调用事件处理程序而无需引用容器。

唯一的问题是事件处理程序的注册。为此,我使用引导程序来调用IUnityRegistration的实例并配置UNITY。我开始使用CommonServiceLocator来减少依赖性。甚至最近,我切换到 MEF 以摆脱所有注册类。