【发布时间】:2015-10-11 08:13:15
【问题描述】:
假设我有以下项目结构:
Application <-> BusinessLogic <-> DataAccessLayer
我已经准备好使用穷人依赖注入的所有类型,现在我想介绍使用 Unity 的真正类型。但是我正在努力将依赖容器及其配置放在哪里(我想我会从代码中配置它)。
- DataAccessLayer需要注册Context (EF)
- BusinessLogic 需要注册数据仓库(使用上下文)
- 应用程序需要注册服务(使用存储库)
目前,使用容器实际实例化类的唯一程序集是应用程序。所以我有以下依赖关系图:
- DI 使用 DataAccessLayer
- DI 使用 BusinessLogic
- DI 使用 应用程序
- 应用程序使用 DI
我在这里有循环引用,所以将 DI 放在 Application 中似乎是合法的。但是我必须引用 DataAccessLayer 并且这是我不想创建的依赖项。我应该如何解决这个问题?
【问题讨论】:
-
"DI" 不应该依赖于任何这些。由客户端(在您的情况下为
Application)使用 DI 注册依赖项。 -
@haim770 “DI 使用 *”我的意思是:“从 * 注册类型的人必须有权访问它”。如果我从
Application注册类型,我必须创建对DataAccessLayer的依赖项,但我不想这样做(如果可能的话,至少)。 -
即使您将注册委托给 DI 项目,您也不会真正获得任何收益,因为最终应用程序依赖于这些程序集,并且它们将 被引用。也许您真正追求的是使用程序集扫描 (autoregistration.codeplex.com) 进行动态注册?
-
@Spook 我不知道您为什么会遇到循环引用之类的问题?您在图层中使用服务定位器模式吗?使用 DI 容器时使用服务定位器模式不是正确的方法
标签: c# dependency-injection unity-container