2012-10-09 108 views
2

在.Net应用程序中使用控制反转时,是否可以在主机应用程序中添加对数据层的引用?使用.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,参考基本上仅用于解决方案。我是否认为这是接近它的正确方法?有没有更好的办法?

回答

3

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

该概念被称为Composition Root

+0

这是一个很好的阅读,谢谢! – Spikeh

相关问题