Dependency injection 使用.Net和程序集引用进行控制反转

Dependency injection 使用.Net和程序集引用进行控制反转,dependency-injection,inversion-of-control,Dependency Injection,Inversion Of Control,在.Net应用程序中使用控制反转时,是否可以在宿主应用程序中添加对数据层的引用 假设我有以下个人项目: MyApp.Data(EF类) MyApp.Business(服务工厂/存储库) MyApp.Services.MyWCFService(主机) MyApp.Presentation.MVC(主机) MyApp.Business.Tests(主机) 在这种情况下,我曾经在MyApp.Business和主机应用程序之间使用过IoC——为每个服务工厂/存储库创建接口,并在主机应用程序中使用DI

在.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完成的,而且参考资料基本上只是为了解决问题。我认为这是正确的方法,对吗?有更好的方法吗?

简言之:是的,可以从应用程序的主要入口点引用应用程序的每个部分

这个概念被称为