【问题标题】:In which assembly should an customized Autofac module reside?定制的 Autofac 模块应该驻留在哪个程序集中?
【发布时间】:2011-11-22 15:03:38
【问题描述】:

我有一个像这样设置的 c# 应用程序:

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

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢马克!这就是我认为要走的路,但我只是想确定一下。我对使用容器还是很陌生(并为此使用 proper 依赖注入)。
    猜你喜欢
    • 2020-12-03
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多