说,我有以下项目结构:
Application <-> BusinessLogic <-> DataAccessLayer
我已准备好使用穷人依赖注入的所有类型,现在我想使用Unity引入真实的类型。但我在努力放置依赖容器及其配置的位置(我想我会从代码中配置它)。
目前,唯一使用容器实际实例化类的程序集将是Application。所以我有以下依赖关系图:
我在这里有循环引用,所以将 DI 放在应用程序中似乎是合法的。但是,我必须引用 DataAccessLayer ,这是我不想创建的依赖项。我该如何解决这个问题?
答案 0 :(得分:3)
如果要使用DI容器,则只应在Application本身中使用它,而不能在其他类库(例如BusinessLogic和DataAccessLayer)中使用它。组成对象图的应用程序中的位置称为Composition Root。
引用该文章:
只有应用程序应具有组合根。图书馆和框架不应该。
既然你已经准备好了你的课程来启用穷人DI(现在称为Pure DI),你应该没事。 DI现已在您的库中启用(请注意DI和DI容器是不同的东西)。
您的应用程序现在可以从所有类库中连接所有类,即使这意味着您的应用程序项目需要引用所有其他类库。
在我看来,如果没有DI容器(即使在应用程序层中),情况会更好,请参阅this article了解原因。
答案 1 :(得分:1)
这样,相对的上层与下层隔离,一切都正确登记。对于A层,它是DL甚至存在的实现细节。它只知道BL层。