.net - 依赖注入(inject) - 分层应用程序

标签 .net dependency-injection inversion-of-control

我希望在新的解决方案中使用 IoC 容器,例如 StructureMap。解决方案项目如下:

  • 桌面.UI
  • 桌面.模型
  • 桌面. View
  • 桌面.演示者
  • 业务逻辑
  • 业务对象
  • 数据访问

其中 Desktop.Models、BusinessLogic 和 DataAccess 都引用 BusinessObjects。

Desktop.UI 项目将是配置 DI 的入口点,但我真的不想仅为 DI 添加对 DataAccess 的引用。

我在 SO 上看到了一些其他问题,一个答案是为 IoC 创建一个单独的项目,引用相关项目,然后从 Desktop.UI 引用 IoC 项目。然而,Desktop.UI 需要 DI 配置来实例化 View 的演示者,因此不确定单独的项目是否可行。

我已经看到了一些定义注册表类和使用 StructureMap 扫描功能自动检测注册表类的基本示例。我的第一个想法是将这些注册表类放入它们正在配置的项目中,但这会导致所有项目都必须引用 StructureMap。

在分层应用程序中设置 DI 的推荐方法是什么?

最佳答案

根据我的经验,我发现我在整个服务器端代码中使用了一种形式的依赖项注入(inject),在客户端代码中使用了一种形式。例如,我最近从事的 WinForms 项目在服务器端使用了 Unity(业务逻辑、数据访问),在客户端使用了智能客户端软件工厂(winforms 的 MVP 框架,包括它自己的 DI 形式)。因此,在您的示例中,我想说,如果您在尝试让 DI 框架在应用程序的所有层上工作时遇到困难,那是因为您不应该这样做。您可能会遇到这样的情况:您想要两种形式的 DI,一种用于客户端,一种用于服务器。

除此之外,我认为大多数 DI 框架都允许您在配置文件中引导依赖项,这是正确的。配置文件告诉框架有关依赖项的所有信息,包括它们所在的程序集。这意味着您不需要在实例化 IoC 容器的项目中引用任何实际项目。因此,在我的框架项目示例中,您将有一个实例化 IoC 容器并从配置文件中读取所有依赖项的单例。

这里有一些链接供您引用:

希望其中一些有所帮助!

问候,

詹姆斯

关于.net - 依赖注入(inject) - 分层应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10160737/

相关文章:

c# - url 西里尔字母编码问题(使用网页浏览器控制)

.net - 如何在 PowerShell 中删除所有导入的模块?

dependency-injection - 当injectionpoint.getBean()可以为null时的CDI

scala - Scala 中的 Guice : Module for a class that has a DI-constructor itself

dependency-injection - Dynamo IoC 是否适用于 MonoTouch 和 MonoDroid?

entity-framework - EF Code First、IoC 和 DbConnection

.net - 使用IOC将POCO作为Web服务公开-Spring.net的WebServiceExporter的替代产品?

c# - 正则表达式 - 仅匹配包含任何字母字符的字符串

java - JHipster - 隐藏@Autowired/@Inject

c# - 如何根据 Web 应用程序 URL 为 Unity 容器动态注册类型(例如,不同的实现)?