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

时间:2011-06-08 11:06:35

标签: dependency-injection inversion-of-control

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

2 个答案:

答案 0 :(得分:63)

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

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

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

  

在实践中,这意味着你   应该在容器配置容器   你应用的根源。

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

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

另见this answer

答案 1 :(得分:3)

Mark Seemann写了一篇关于Composition Root设计模式的精彩文章。

本文的要点是:

  

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

     

只有应用程序应具有组合根。图书馆和   框架不应该。

     

DI容器只能从Composition Root引用。   所有其他模块都不应该引用容器。

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。