1

我阅读了依赖注入原理、实践和模式,并试图弄清楚Composition RootComposer之间的实际区别。

在书中,它们的定义是:

组合根是应用程序中的单个逻辑位置,其中模块组合在一起。

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();
    }
}

问候

4

1 回答 1

1

组合根可以被认为是一个架构模块,甚至是一个。它可以拥有将应用程序连接在一起所需的所有基础设施,这些基础设施不属于任何较低层(例如表示层、域或数据访问层)。考虑以下代码:

  • 从消息队列中读取并将消息分派给应用程序,
  • 应用横切关注点的装饰器,
  • 将应用程序与外部世界连接起来的适配器实现

在 Composition Root 可以拥有所有这些基础设施代码的地方,Composer 将只包含通知所有这些代码片段的代码,确保根据它们的生活方式进行缓存,并从这些创建的组件中构建对象图。

于 2020-03-01T11:54:44.143 回答