摘要组合根在可重用的库中

时间:2013-03-14 06:02:34

标签: c# design-patterns dependency-injection composition

在我的第一个问题中

Locate the correct composition root for a .NET library

帮助阐明了依赖注入。史蒂文的详尽答案(,如果有可能),可重复使用的库是特定情况,在这里我们可以使用poor-man-injection(请参阅答案的完整性)。

研究AutoFixture的源代码,您可以注意到主程序集在任何地方使用DI而不依赖于容器; Mark Seemann书中详细解释的内容。

问题是:有人可以引入模式(或良好实践)来抽象组合根而不使用容器吗?

附加说明(可选):

回到AutoFixture,其中组合根出现在Fixture类型构造函数中;我认为*Relays类用于以类似的方式对实例进行分组,而某些DI库具有模块的概念。 有趣的是,有一个名为BehaviourRoot的类型位于图的顶部(这是我正在搜索的抽象类型吗?)。

1 个答案:

答案 0 :(得分:10)

description of the Composition Root pattern明确声明可以在没有DI容器的情况下实现它。该模式与容器使用无关,可以与容器一起使用或不与容器一起使用。

组合根是应用程序的入口点。根据定义,它有没有调用者所以抽象它是没有意义的。

引用上述文章:

  

Composition Root是应用程序基础架构组件

     

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

(我的重点突出)

AutoFixture是一个库,因此没有Composition Root。建立Façade的精神是FixtureDI-friendly library