gpt4 book ai didi

c# - 依赖注入(inject)与程序集依赖

转载 作者:太空狗 更新时间:2023-10-29 21:43:59 24 4
gpt4 key购买 nike

比如说,我有以下项目结构:

Application <-> BusinessLogic <-> DataAccessLayer

我已经准备好使用 poor-man's-dependency-injection 的所有类型,现在我想介绍使用 Unity 的真实类型。但是我正在努力确定将依赖项容器及其配置放在哪里(我想我会从代码中配置它)。

  • DataAccessLayer需要注册Context(EF)
  • BusinessLogic 需要注册数据存储库(使用上下文)
  • 应用程序需要注册服务(使用存储库)

目前,唯一使用容器来实际实例化类的程序集将是应用程序。所以我有以下依赖关系图:

  • DI 使用 DataAccessLayer
  • DI 使用 BusinessLogic
  • DI 使用Application
  • Application 使用 DI

我在这里有循环引用,所以将 DI 放在 Application 中似乎是合法的。但是我必须引用 DataAccessLayer 并且这是我不想创建的依赖项。我该如何解决这个问题?

最佳答案

如果你想使用 DI 容器,那么你应该只在应用程序本身中使用它,而不是在你的其他类库中(例如 BusinessLogic 和 DataAccessLayer)。应用程序中您编写对象图的位置称为 Composition Root .

引用那篇文章:

Only applications should have Composition Roots. Libraries and frameworks shouldn't.

既然你已经准备好你的类(class)来启用可怜的 DI(现在称为 Pure DI),你应该没问题。 DI 现已在您的库中启用(请注意 DI 和 DI 容器是不同的东西)。

您的应用程序现在可以将所有类库中的所有内容连接在一起,即使这意味着您的应用程序项目将需要引用所有其他类库。

在我看来,没有 DI 容器(即使在应用层)你会更好,参见 this article这是有原因的。

关于c# - 依赖注入(inject)与程序集依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33062860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com