Я использую Simple Injector с проектом ASP.NET MVC. Я добавил пакет SimpleInjector.Integration.Web.Mvc
nuget. Это добавляет класс SimpleInjectorInitializer
в папку App_Start
и инициализирует 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));
}
Это правильно настраивает DI для контроллера MVC.
Мой вопрос: если я хочу получить экземпляр контейнера в любом из контроллеров \ классов, чтобы вручную разрешить некоторую зависимость, как я могу это сделать.
Раньше я работал с AutoFac, и у него есть интерфейс зависимостей IComponentContext
, который может быть введен в любой класс, которому необходимо выполнить любое разрешение вручную.
Обновление:
Вот такой сценарий. Мой контроллер использует службу, инициализация которой зависит от входного параметра, переданного в методе контроллера, и, следовательно, зависимость не может быть создана во время создания.
Я понимаю, что это в некоторой степени антипаттерн для DI, но он требуется в некоторых местах, и, следовательно, инъекция контейнера DI - следующая лучшая вещь. В примерах Simple Injector следует использовать статическую переменную для совместного использования контейнера, которого я хочу избежать, а также это невозможно, кстати, SimpleInjectorInitializer
работает.