C# 每个类库的依赖项注入容器

C# 每个类库的依赖项注入容器,c#,dependency-injection,automapper,unity-container,C#,Dependency Injection,Automapper,Unity Container,所以,这是我第一次和DI打交道,如果我误解了整个DI,请纠正我 以下是我的几个项目: Web应用程序/Web API项目-取决于服务类+注入自动映射(配置仅适用于当前项目) 服务(类库)-取决于数据类+注入自动映射(配置仅适用于当前项目) 数据(类库) 我的意图是让每个项目都有自己的DI容器(UnityDI说)。我不确定每个项目是否都有自己的DI容器 我读过一些文章,表明这是不可能的(不确定我是否正确地解释了它们),但我不确定为什么 如果无法完成,有人能解释一下吗?我该如何实现这一点?我不想将数

所以,这是我第一次和DI打交道,如果我误解了整个DI,请纠正我

以下是我的几个项目:

  • Web应用程序/Web API项目-取决于服务类+注入自动映射(配置仅适用于当前项目)
  • 服务(类库)-取决于数据类+注入自动映射(配置仅适用于当前项目)
  • 数据(类库)
  • 我的意图是让每个项目都有自己的DI容器(UnityDI说)。我不确定每个项目是否都有自己的DI容器

    我读过一些文章,表明这是不可能的(不确定我是否正确地解释了它们),但我不确定为什么

    如果无法完成,有人能解释一下吗?我该如何实现这一点?我不想将数据层中的类注册到应用层DI中

    如果每个项目都可以拥有自己的DI,那么在将IMapper注册为实例时,它会覆盖其他层的IMapper吗

    我的意图是让每个项目都有自己的DI容器(UnityDI说)。我不确定每个项目是否都有自己的DI容器

    如前所述,您应该组合所有对象图:

    尽可能靠近应用程序的入口点。

    这个地方被称为“合成根”:

    组合根是(最好)模块组合在一起的应用程序中的唯一位置。

    换句话说,您应该使用DI容器并配置应用程序依赖项的唯一位置是在启动项目中。所有其他项目都应该忽略容器,并且应该完全应用构造函数注入

    我读了一些文章,表明这是不可能做到的

    这是可以做到的,但你不应该

    如果每个项目都可以有自己的DI,那么在将IMapper注册为实例时,它会覆盖其他层的IMapper吗

    如果应用合成根模式,此问题将消失。在组合根中可以完全控制哪个组件获得哪个依赖项


    PRO提示:阅读。

    这是否意味着对于service.dll的每个使用者都需要复合根目录才能包含依赖项?如果我需要将此dll发布给公众,该怎么办?@Leonz:如果您创建了可重用库,并且建议适用。“这是否意味着对于每个service.dll的使用者都需要复合根以包含依赖项?”只有启动项目才会有复合根,通常情况下,复合根是。