【发布时间】:2013-07-28 08:28:06
【问题描述】:
我正在将 Simple Injector 与 ASP.NET MVC 项目一起使用。我添加了SimpleInjector.Integration.Web.Mvc nuget 包。这会在App_Start 文件夹中添加SimpleInjectorInitializer 类并初始化DI。代码看起来像
public static void Initialize()
{
// Did you know the container can diagnose your configuration?
// Go to: https://simpleinjector.org/diagnostics
var container = new Container();
//Container configuration code
DependencyResolver.SetResolver(
new SimpleInjectorDependencyResolver(container));
}
这会正确配置 MVC 控制器的 DI。
我的问题是,如果我想在任何控制器\类中获取容器的实例来手动解决一些依赖关系,我该怎么做。
我之前在 AutoFac 上工作过,它有一个依赖接口 IComponentContext,可以将它注入到需要手动进行任何解析的任何类中。
更新:
这是一个场景。我的控制器使用了一个服务,该服务的初始化依赖于控制器方法中传递的输入参数,因此在构建期间无法实例化依赖项。
我知道这对 DI 来说有点反模式,但它在少数地方是必需的,因此注入 DI 容器是下一个最好的方法。简单的 Injector 示例应该使用静态变量来共享我想要避免的容器,而且 SimpleInjectorInitializer 的工作方式也是不可能的。
【问题讨论】:
-
你可以注入容器,但你不应该。在这种情况下,您将容器作为service locator 滥用。为什么需要该控制器中的容器?
-
添加需要支持的场景
标签: c# asp.net-mvc dependency-injection simple-injector