自定义Autofac模块应该驻留在哪个程序集中

本文关键字:程序 程序集 集中 模块 Autofac 自定义 | 更新日期: 2023-09-27 18:15:29

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

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

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

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

谢谢

自定义Autofac模块应该驻留在哪个程序集中

容器只能从应用程序的组合根中引用,在你的例子中,这意味着ConsoleApp程序集

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

也可以在一个单独的程序集中实现该模块,并从Composition根中加载该模块,但由于该程序集(ConsoleApp)仍然需要对Autofac的引用,因此这样做不会获得太多好处。这在一定程度上取决于所讨论的场景,但是除非您正在创建一个ISV应用程序,并将其作为一块(实际上)压缩包装的软件交付给许多不受控制的客户,否则很少值得付出努力。