我希望在新的解决方案中使用 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/