模块的依赖关系

时间:2019-02-04 14:36:13

标签: c# dependency-injection autofac autofac-module

我正在学习AutoFac。 我喜欢模块的想法。以我的理解,例如,我可以创建一个模块,将我的应用程序依赖关系的某些部分注册到容器中,以在其之上创建一些抽象。但是,我真的不知道在有多个模块的情况下该怎么办。

  1. 首先是,我应该创建一个单独的LoggerModule来做到这一点:

    builder.RegisterType <'MyLogger>()。As <'ILogger>();

还是应该将其直接放在合成根目录中?问题来自于我的困惑,如果在同一个组合根目录上注册模块(较高抽象度)和服务(较低抽象度)是否是一个好主意。 是否应该仅为使用许多依赖项的服务创建模块,以使注册在组合根级别更简单?

  1. 另一件事:注册需要ILogger的服务的其他模块如何?我应该只是假设已经注册了ILogger,而只是c.Resolve <'ILogger>(),还是应该再次注册它,以便每个模块都注册了所有需要的依赖项?

  2. 我可以创建一个注册其他模块的模块吗?

我试图寻找这些问题的答案,但我只发现了一些很接近的话题,而并非真正关于我的问题。

1 个答案:

答案 0 :(得分:2)

将模块视为配置工具,而不是应用程序组件。它们用于设置应用程序将依赖的组件的容器。考虑到这一点:

  1. 好的。没有理由不应该出于单一目的而存在模块(例如在容器中配置日志记录)。但是,日志记录通常是一项基本服务,通常是“内置”在应用程序的根(或外壳)中。
  2. 其他组件应仅假定日志记录可用,并且配置日志记录是其他人的责任。这是依赖项注入的本质-如果所需的服务不可用,则您的应用程序将无法运行。
  3. 从技术上讲这是可行的,但我不会这样做。尝试将模块视为独立的模块,而不是彼此直接依赖。在复杂的应用程序中,在启动时加载模块的 order 可能很重要,但是我认为实现细节不应影响体系结构抽象。