在我的第一个问题中
Locate the correct composition root for a .NET library
帮助阐明了依赖注入。史蒂文的详尽答案(,如果有可能),可重复使用的库是特定情况,在这里我们可以使用poor-man-injection
(请参阅答案的完整性)。
研究AutoFixture的源代码,您可以注意到主程序集在任何地方使用DI而不依赖于容器; Mark Seemann书中详细解释的内容。
问题是:有人可以引入模式(或良好实践)来抽象组合根而不使用容器吗?
附加说明(可选):
回到AutoFixture,其中组合根出现在Fixture
类型构造函数中;我认为*Relays
类用于以类似的方式对实例进行分组,而某些DI库具有模块的概念。
有趣的是,有一个名为BehaviourRoot
的类型位于图的顶部(这是我正在搜索的抽象类型吗?)。
答案 0 :(得分:10)
description of the Composition Root pattern明确声明可以在没有DI容器的情况下实现它。该模式与容器使用无关,可以与容器一起使用或不与容器一起使用。
组合根是应用程序的入口点。根据定义,它有没有调用者所以抽象它是没有意义的。
引用上述文章:
Composition Root是应用程序基础架构组件。
只有应用程序应具有组合根。 图书馆和框架不应该。
(我的重点突出)
AutoFixture是一个库,因此没有Composition Root。建立Façade的精神是Fixture
类DI-friendly library。