繁体   English   中英

使用Simple Injector的控制台应用程序中的SetResolver

[英]SetResolver in console application using Simple Injector

我正在寻找等效的方法:

DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));

但是在控制台应用程序中。 在某些情况下,我需要以工作者角色执行此操作。 我不想在整个地方都添加对MVC dll的引用。 我想知道非mvc项目是否有等效项目? 我需要隐藏创建的容器,以便可以在整个应用程序中访问它。 我曾想创建一个静态变量,但我不想这样做。

我看到有用于Simple Injector的CommonSerivceLocator nuget,但奇怪的是它需要2.8.1,而最新的非mvc Simple Injector是2.8.0。

我不想在整个地方都添加对MVC dll的引用。

这表明您不是在应用依赖项注入,而是在进行Service Location ,这是一种反模式

如果将构造函数注入应用于所有组件,则可以让Simple Injector建立依赖组件(深度很深)的完整对象图,而无需让任何组件知道IoC容器(例如Simple)的存在注入器或IoC抽象,例如Common Service Locator和MVC的IDependencyResolver 这样可以防止您“遍地”引用IoC容器或此类抽象。

因此,在控制台应用程序中,这通常意味着您有一个解析对象图的地方。 这是应用程序中已经知道IoC容器存在的位置。 此位置通常称为“ 合成根”

我看到有用于Simple Injector的CommonSerivceLocator nuget,但奇怪的是它需要2.8.1,而最新的非mvc Simple Injector是2.8.0。

我似乎在创建NuGet程序包的构建脚本中出错,尽管NuGet通常在上载程序包时应用检查,但由于某种原因,它无法对此进行检查。 我修复了此问题,并将CommonServiceLocator适配器的v2.8.2推送到了NuGet。 但是请注意,我们在Simple Injector的v3版本中放弃了对CSL适配器的支持,因为这会导致不良做法。 不要使用它; 您不需要它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM