Доступ к экземпляру контейнера с помощью LighInject

При использовании LightInject, как вы можете использовать доступ к экземпляру контейнера в контекстах, отличных от начальной регистрации / начальной загрузки? Я следовал руководству по началу работы с LightInject и гуглял, но ничего подобного не нашел.

Для справки я представляю, как это достигается в двух других платформах IoC.

Ninject

При использовании Ninject я привык автоматически привязывать тип IKernel к ядру (Container on LighInject), поэтому класс с конструктором выглядит так:

public MyClass(IKernel kernel)
{
    var myInstance = kernel.Get<IMyType>();
}

сможет использовать ядро ​​для извлечения экземпляров.

SimpleIoC

При использовании SimpleIoC, инфраструктуры, которая поставляется с MvvmLight, вы можете использовать статическое свойство (SimpleIoC.Default) для достижения той же цели:

var myInstance = SimpleIoc.Default.GetInstance<IMyType>();

1 ответ

Короткий рассказ

LightInject не предоставляет ничего подобного.

разработка

Это подразумевает такие вещи, как ServiceLocator, которые большинство людей, включая создателя LightInject, видят как анти-паттерн, которого следует избегать. Идея заключается в том, чтобы ServiceContainer (или Kernel, как известно на ninject) использовался исключительно во время запуска.

Мой взгляд на это

В моем случае у меня есть приложение WPF с MvvmLight. Я хочу следовать подходу ViewModelLocator, продвигаемому этой библиотекой, который в значительной степени требует чего-то вроде ServiceLocator.

В MvvmLight ViewModelLocator должен содержать экземпляры каждого ViewModel, а также должен быть настроен как ресурс в файле App.xaml. Это подразумевает, что ViewModelLocator обязательно должен иметь конструктор без параметров, что делает невозможным использование инфраструктуры IoC для привязки ссылок.

Мое решение состояло в том, чтобы создать Singleton для предоставления ServiceContainer, чтобы на него можно было ссылаться из ViewModelLocator для предоставления экземпляров для ViewModels.

Следующая дискуссия была очень интересной и дала мне разные точки зрения на эту проблему:

Как обрабатывать внедрение зависимостей в приложении WPF/MVVM

Другие вопросы по тегам