我试图找出为我的域存储库服务配置我的依赖注入容器的代码所在的位置。
我最初的想法是让客户端配置所有服务,但是客户端需要知道存储库服务,我不想在客户端中公开它。
我以为每个层都可以通过公开的配置方法或类配置自己的服务依赖项?
答案 0 :(得分:4)
我最初的想法是让客户端配置所有服务,但是 然后客户端需要知道存储库服务,我 不想在客户端曝光。
我倾向于遵循组合根模式,我的网络项目将是IoC接线开始的第一个地方(即通常会将第三方库连接到控制器工厂的第三方库) )。但是我通过引用IoC模块来配置其余的IoC绑定(在我的情况下,我通常使用Ninject,所以我从我的web项目中引用NinjectModule
)。但我把这个NinjectModule
放在一个单独的基础设施项目中。
然后,我可以从我的Web项目中引用此IoC基础结构项目,IoC项目可以引用解决方案中的所有其他项目。
这样我就不必在我的web项目中创建项目引用,以便我可能不希望我的web项目访问,比如我的存储库层。
答案 1 :(得分:2)
答案已经在评论中给出了,我只是在这里把它包起来。
除非您使用像插件架构这样的特殊用途架构,否则应始终将DI容器配置在一个位置,尽可能靠近应用程序入口点。这称为组合根。
配置的类型是存储库,工厂,域服务还是应用程序服务并不重要。所有DI配置都应该在一个位置。
有关组成根的详细信息,请参阅this blog post。