我在 app.xaml 中定义了一个 ViewModelLocator 类,我的视图使用它来将数据绑定到正确的 ViewModel。
DataContext="{Binding HomeViewModel, Source={StaticResource Locator}}"
我正在使用 Prism 和 Unity,而我的 ViewModelLocator 类需要对应用程序级统一容器的引用。
我想将 IUnityContainer 注入 ViewModelLocator 的 ctor,但 ViewModelLocator 使用无参数 ctor 从 app.xaml 实例化。
是否有一种首选的方式来访问应用程序级容器 - 对于应用程序中的所有其他类,我只使用 ctor 注入来获取全局容器。
我现在为 ViewModelLocator 做的是在我的 BootStrapper 类中定义一个静态变量来存储容器。我通过覆盖 UnityBootStrapper 上的 CreateContainer 方法来创建容器。
protected override IUnityContainer CreateContainer()
{
BootStrapper.DIContainer = base.CreateContainer();
return BootStrapper.DIContainer;
}
然后在ViewModelLocator类中,我只引用 BootStrapper.DIContainer 属性来注册我的视图模型
BootStrapper.DIContainer.RegisterType<IShellViewModel, DesignShellViewModel>();
这工作正常,但它是应用程序中唯一需要在引导程序上引用此静态属性的地方 - 并且如果可能的话希望摆脱它。
谢谢迈克尔