简单的注射器在自己的项目中

时间:2014-01-25 18:29:25

标签: c# asp.net-mvc model-view-controller simple-injector

我试图在具有以下架构的项目中使用Simple Injector:

  • DAL层(拥有存储库),
  • BLL层(拥有与存储库对话的服务),
  • MVC层(与BLL层中的服务对话)。

当涉及向容器注册类和接口时,我面临一个问题,Simple Injector需要我用其接口注册存储库(因为我的服务层中的类接受其构造函数中的存储库)

所以,实际上,Simple Injector强迫我在我的MVC层中添加对我的DAL层的引用,我真的很想避免。

我的问题是,是否有可能/正确地创建一个只包含Simple Injector的外部项目,这个项目将引用所有其他项目,这样我就可以注册我想要的东西并仍然保留我的项目抽象?

还是有其他简单的方法来解决这个问题?

1 个答案:

答案 0 :(得分:2)

DI容器(例如您的Simple Injector)只能从Composition Root中引用。所有其他模块都不应该引用容器。

您可以在此处阅读有关组合根的更多信息:

http://blog.ploeh.dk/2011/07/28/CompositionRoot/

什么是DI容器应该完全使用注册解析发布模式从组合根中应用。 关于这种模式的更多信息:

http://blog.ploeh.dk/2010/09/29/TheRegisterResolveReleasepattern/