在我的第一个问题中

Locate the correct composition root for a .NET library

帮助澄清了依赖注入(inject)。史蒂文(Steven)的详尽回答(如果可能的话,用几句话)指出了一个可重用的库是一种特殊情况,在这里我们可以使用poor-man-injection(完整性请参见答案)。

在研究AutoFixture的源代码时,您可以注意到,主程序集在任何地方都使用DI,而无需依赖于容器。 Mark Seemann书中很好地解释了一些内容。

问题是:有人可以在不使用容器的情况下引入模式(或良好做法)来抽象化合成词根吗?

其他说明(可选):

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

最佳答案

description of the Composition Root pattern明确声明它可以在没有DI容器的情况下实现。该模式与容器的使用无关,并且可以与容器一起使用,也可以不与容器一起使用。
合成根是应用程序的入口点。根据定义,它没有没有调用者,因此抽象它没有任何意义。
引用以上文章:

(大胆强调)
AutoFixture是一个库,因此没有“合成根目录”。本着构建Façade的精神,Fixture类为DI-friendly library

关于c# - 在可重用的库中提取合成根,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15402292/

10-10 14:30