2

在 .Net 应用程序中使用控制反转时,是否可以在主机应用程序中添加对数据层的引用?

假设我有以下个人项目:

  • MyApp.Data(EF 类)
  • MyApp.Business(服务工厂/存储库)
  • MyApp.Services.MyWCFService(主机)
  • MyApp.Presentation.MVC(主机)
  • MyApp.Business.Tests(主机)

在这种情况下,我一直在 MyApp.Business 和宿主应用程序之间使用 IoC - 为每个服务工厂/存储库创建接口,并在宿主应用程序中使用 DI。然后,每个应用程序都可以选择注入自己的业务工厂实现。我从来没有遇到过这个问题,因为我的主机应用程序只依赖于业务层,而且我永远不必引用 MyApp.Data 程序集(我的 MyApp.Business 通常处理对 MyApp.Data 程序集的所有调用,并将结果呈现给复合业务对象)。

我想通过我的最新项目实现的是在各个级别使用 IoC - 即在 MyApp.Data 中创建接口,这样我就可以对 MyApp.Business 应用模拟和适当的单元测试。在我看来,实现这一点的唯一方法是在宿主应用程序中创建对 MyApp.Business 和 MyApp.Data 的程序集引用,然后使用 DI 注入 MyApp.Data 和 MyApp.Business 实现。

这与我在传统 nTier 应用程序中学到的一切相反,尽管我知道是 DI 完成了所有工作,并且参考基本上仅用于解决问题。我是否正确地假设这是处理它的正确方法?有没有更好的办法?

4

1 回答 1

3

简而言之:是的,可以从应用程序的主入口点引用应用程序的每个部分和任何部分。

这个概念被称为Composition Root

于 2012-10-09T09:39:58.687 回答