У меня есть класс ViewModelLocator, который я определяю в app.xaml, который используется моими представлениями для привязки данных к правильному ViewModel.
DataContext="{Binding HomeViewModel, Source={StaticResource Locator}}"
Я использую Prism и Unity, и мой класс ViewModelLocator нуждается вссылка на контейнер уровня приложения.
Я хотел внедрить IUnityContainer в ctor объекта ViewModelLocator, но экземпляр ViewModelLocator создается из app.xaml с использованием ctor без параметров.
Есть ли предпочтительный способчтобы получить доступ к контейнеру уровня приложения - для всех других классов в приложении я просто использую инъекцию ctor, чтобы получить глобальный контейнер.
То, что я в данный момент делаю для ViewModelLocator, определяет статическую переменную в моем классе BootStrapperхранить контейнер.Я создаю контейнер путем переопределения метода CreateContainer в UnityBootStrapper.
protected override IUnityContainer CreateContainer()
{
BootStrapper.DIContainer = base.CreateContainer();
return BootStrapper.DIContainer;
}
Затем в классе ViewModelLocator я просто ссылаюсь на свойство BootStrapper.DIContainer, чтобы зарегистрировать мои viewmodels
BootStrapper.DIContainer.RegisterType<IShellViewModel, DesignShellViewModel>();
Это прекрасно работает, но это единственное место в приложении, которое должно ссылаться на это статическое свойство на загрузчике - и хотело бы избавиться от него, если это возможно.
спасибо Майкл