依赖注入自动注册被认为是不好的做法吗?

Dis*_*ive 7 .net dependency-injection .net-core

在 .NET Core 之前,我曾经使用 Unity 作为 IOC 容器,它允许您使用约定优于配置的方式将类自动注册到 IOC 容器中。

对于 .NET Core,您应该使用的默认 IOC 容器似乎没有此功能?

在我覆盖默认选项并使用第三方 IOC 解决方案之前,标准依赖注入框架是否有任何原因甚至没有将其作为打开的功能?自动注册现在被认为是不好的做法吗?如果是,为什么最好明确指定所有内容?

Ste*_*ven 7

《依赖注入原则、实践和模式》第 12 章中,Mark Seemann和我实际上提出了相反的说法:

DI 容器可以是有价值的,也可以是毫无意义的,具体取决于它的使用方式。当以足够复杂的方式使用它时(使用自动注册),我们认为 DI 容器可以提供最佳的价值/成本比。

换句话说,自动注册使得 DI 容器对于应用程序开发非常有用。

此消息反映在 Mark 的一篇旧帖子中,标题为“何时使用 DI 容器”。在这篇文章中,他展示了下图来形象化这一点:

DI 注册权衡

请注意,图中指出“穷人的 DI”的地方,本书现在使用术语“纯 DI”显式注册是 MS.DI 使用的模型,约定优于配置与自动注册基本相同。

MS.DI 容器没有任何自动注册功能的原因是,此实现故意保持最小化,并且是专门为 ASP.NET Core 框架作为其主要使用者而设计的。它的设计并未考虑到应用程序开发。因此,从这个角度来看,您无法从这一遗漏中推断出良好的做法。

在本书中,我们用了完整的一节(12.3)来讨论何时使用 DI 容器以及如何使用它。您可以在此处在线阅读该信息,因此我不会在该完整部分中重复推理。我还强烈建议您完整阅读第 12 章。