Dependency injection 在主项目外部使用公共服务定位器

Dependency injection 在主项目外部使用公共服务定位器,dependency-injection,inversion-of-control,ninject,structuremap,common-service-locator,Dependency Injection,Inversion Of Control,Ninject,Structuremap,Common Service Locator,我最近从StructureMap跳到了Ninject。一切都很顺利,直到我意识到Ninject没有StructureMap的ObjectFactory(服务定位器)版本 我发现了公共服务定位器,它为包括Ninject在内的任何IOC容器提供服务定位器模式。它在我的“初创”项目中非常有效,例如网站。但如果我试图从子项目(例如核心或数据)访问ServiceLocator.Current,那么CommonServiceLocator似乎不知道我的任何依赖关系映射 如何使用子项目中的公共服务定位器 注意

我最近从StructureMap跳到了Ninject。一切都很顺利,直到我意识到Ninject没有StructureMap的ObjectFactory(服务定位器)版本

我发现了公共服务定位器,它为包括Ninject在内的任何IOC容器提供服务定位器模式。它在我的“初创”项目中非常有效,例如网站。但如果我试图从子项目(例如核心或数据)访问ServiceLocator.Current,那么CommonServiceLocator似乎不知道我的任何依赖关系映射

如何使用子项目中的公共服务定位器

注意:我知道关于ServiceLocator作为模式/反模式的争论。我发现,作为反模式的ServiceLocator和作为反模式的贫血症域模型之间存在一种折衷——有时使用服务定位器更容易维护。

使用而不是直接访问容器。这使您的应用程序不受特定容器的影响,并防止使用服务定位器

您必须访问内核的唯一情况是在组合根中一次,以及在一些非常罕见的情况下无法控制对象创建。在这些情况下,您仍然可以将内核分配给单例对象,或者使用ServiceLocator使其可以从任何地方访问

ServiceLocator是一个静态对象。因此,与访问它的位置没有区别。我假设您在完全混淆ServiceLocator之前正在访问它。

使用而不是直接访问容器。这使您的应用程序不受特定容器的影响,并防止使用服务定位器

您必须访问内核的唯一情况是在组合根中一次,以及在一些非常罕见的情况下无法控制对象创建。在这些情况下,您仍然可以将内核分配给单例对象,或者使用ServiceLocator使其可以从任何地方访问


ServiceLocator是一个静态对象。因此,与访问它的位置没有区别。我假设您在完全混淆ServiceLocator之前访问了它。

没有进入关于使用服务定位器的辩论,您是否尝试过此NuGet软件包


当我决定要一个时,这就是我所用的。

没有进入关于使用服务定位器的辩论,你试过这个NuGet软件包吗


当我决定要一个时,这就是我所使用的。

>有时使用服务定位器更容易维护。我不能说我完全同意那个说法,但无论如何。。。您是否有任何代码显示您如何设置NInject定位器适配器?可能会无缘无故地重复引入CSL,因为您想忽略建议。re SL不会改变您正在寻找一种方法来进行SL的事实,因此我的VTC>有时使用服务定位器更容易维护。我不能说我完全同意那个说法,但无论如何。。。您是否有任何代码显示您如何设置NInject定位器适配器?可能会无缘无故地重复引入CSL,因为您想忽略建议。SL不会改变您正在寻找一种方法来进行SL的事实,因此我的VTC