我在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容器是次佳選擇。簡單的注射器樣本應該使用靜態變量來共享我想避免的容器,也不可能按照SimpleInjectorInitializer
的方式工作。
您可以注入容器,但不應該。在這種情況下,您正在濫用容器作爲[服務定位器](http://blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern/)。你爲什麼需要該控制器中的容器? – Steven
添加了一個需要支持的場景 – Chandermani