我阅读了依赖注入原理、实践和模式,并试图弄清楚Composition Root和Composer之间的实际区别。
在书中,它们的定义是:
组合根是应用程序中的单个逻辑位置,其中模块组合在一起。
Composer是一个统一的术语,指的是任何组成依赖关系的对象或方法。它是合成根的重要组成部分。Composer 通常是一个 DI 容器,但它也可以是任何手动构造对象图的方法(使用纯 DI)。
Composition Root更像是我们应该创建应用程序图的地方/位置的名称,而Composer是实际执行它的那个东西吗?或者是别的什么?
如果您使用 DI Container,Composition Root应该是您使用 DI Container 的唯一位置。
您还可以在Composition Root中拥有什么?它不只是一个 DI Container 吗?
public class CompositionRoot
{
public static IContainer Compose()
{
var builder = new ContainerBuilder();
builder.RegisterType<Calculator>().As<ICalculator>().SingleInstance();
return builder.Build();
}
}
问候