什么是依赖注入上下文中的组合根

Tho*_*mas 66 dependency-injection inversion-of-control

我正在探索依赖注入,并且在整个地方使用术语组合根.那是什么?

Sam*_*der 67

组合根是应用程序中的单个位置,其中使用依赖注入容器进行应用程序的对象图的组合(尽管如何完成此操作是无关紧要的,它可以使用容器,也可以使用手动完成DI).

应该只有一个地方发生这种情况,你的容器不应该在组合根之外使用.

引用以下链接中的一个答案:

实际上,这意味着您应该在应用程序的根目录配置容器.

  • 在桌面应用程序中,它将在Main方法中(或非常接近它)
  • 在ASP.NET(包括MVC)应用程序中,它将在Global.asax中
  • 在WCF中,这将在ServiceHostFactory中
  • 等等

这里有一个很好的答案, 可以解释一下这个问题.

另见这个答案.


Jo-*_*-Go 8

Mark Seemann 写了一篇关于组合根设计模式的精彩文章。

本文的要点是:

组合根是应用程序中模块组合在一起的(最好)唯一位置。

只有应用程序才应具有组合根。库和框架不应该。

DI 容器只能从组合根引用。所有其他模块不应引用该容器。

http://blog.ploeh.dk/2011/07/28/CompositionRoot/

我根据这些原则编写了自己的 JavaScript 依赖注入框架,名为 Di-Ninja

https://github.com/di-ninja/di-ninja

据我所知,它是 javascript 中唯一实现 Composition-Root 设计模式的一个,它的文档可能是另一个很好的例子来演示它是如何工作的。

它可以与 NodeJS、浏览器(使用 Webpack 或 UMD/AMD)和 React-Native 配合使用。