应该在哪个组件中定制Autofac模块?

时间:2011-11-22 15:03:39

标签: c# dependency-injection inversion-of-control autofac

我有一个c#应用程序设置如下:

[Assembly-ConsoleApp] --References--> [Assembly-Domain] 
                                               /
[Assembly-FileAccess] --References-->---------/

基本上,我的大多数接口和一些具体的类都可以在Domain程序集中找到,其中有很多具体的实现在FileAccess程序集中找到。 ConsoleApp程序集使用Domain程序集而不引用FileAccess程序集。

我创建了一个autofac FileAccess模块​​,用于将FileAccess实现与Domain接口连接起来,以及直接在Domain程序集内部的任何具体类。我的问题是在哪里放这个模块。从最佳实践的角度来看,模块应该在FileAccess程序集中(这需要我在autofac程序集上添加引用/依赖项)还是应该在ConsoleApp程序集中(使用该模块并且已经具有autofac依赖性)?或者只是具有给定模块的完全独立的组件是否有意义?

由于

1 个答案:

答案 0 :(得分:9)

只应从应用程序的Composition Root引用容器,在您的情况下,这意味着 ConsoleApp程序集

这可确保包含应用程序逻辑的程序集不受任何特定DI容器的依赖。

可以在单独的程序集中实现该模块并从Composition Root加载该模块,但由于该程序集(ConsoleApp)仍然需要对Autofac的引用,因此这样做并不多。这有点取决于相关场景,但除非您创建的ISV应用程序作为一个(虚拟)收缩包装软件发送给许多不受控制的客户,否则很少值得付出努力。