模块的依赖

Dependencies of a module

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

  1. 首先,我是否应该为此创建一个单独的 LoggerModule:

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

还是应该直接放在组合根目录下?如果在同一级别的组合根上注册模块(更高抽象)和服务(更低抽象)是个好主意,这个问题来自我的困惑。 是否应该只为使用很多依赖项的服务创建模块,以便在组合根级别上简化注册?

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

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

我试图寻找这些问题的答案,但我只找到了相近的主题,但与我的问题无关。

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

  1. 当然可以。没有理由不为单一目的而存在模块(例如在容器中配置日志记录)。然而,通常情况下,日志记录是一项基础服务,它通常 "built-in" 在应用程序的根目录(或 shell)。
  2. 其他组件应该假定日志记录可用并且配置它是其他人的责任。这就是依赖注入的本质——如果所需的服务不可用,您的应用程序就无法 运行.
  3. 这在技术上是可行的,但我不会这样做。尝试将模块视为独立的,而不是直接相互依赖。在复杂的应用程序中,启动时加载模块的 顺序 可能很重要,但我认为不应影响架构抽象的实现细节。