如何使用/在何处使用 PRISM 和 Unity 在 MVVM 中实例化模型对象
本文关键字:MVVM 实例化 对象 模型 Unity 何使用 在何处 PRISM | 更新日期: 2023-09-27 18:31:30
我尝试使用PRISM和UNITY实现我的第一个应用程序。所以我尝试将我的应用程序拆分为几个模块。
在我的模块中,我有相关的视图以及视图模型。
目前,我实例化了我的视图模型,并在视图代码隐藏中设置了视图的数据上下文:
public partial class View : UserControl
{
public View(IViewModel vm)
{
InitializeComponent();
this.DataContext = vm;
}
}
我的模型是使用我的视图模型 ctor 中的单位容器实例化的。
public ViewModel(IEventAggregator eventAggregator, IUnityContainer container)
{
_eventAggregator = eventAggregator;
_model = container.Resolve<Model>();
this._model.PropertyChanged += new PropertyChangedEventHandler(OnModelPropertyChanged);
}
在使用 Unity 容器之前,我通过 ViewModels 构造函数通过依赖注入来注入模型。
但这似乎行不通。我通过以下方式尝试了一下:
public ViewModel(IEventAggregator eventAggregator, Model model)
{
_eventAggregator = eventAggregator;
_model = model
this._model.PropertyChanged += new PropertyChangedEventHandler(OnModelPropertyChanged);
}
这个实现给了我一个例外,我也找不到如何设置容器,以便模型注入以我尝试的方式工作。
我想做的是在模块类中实例化我的模型。从那里我想把它注入到我的视图模型中。
所以我的问题是:
- 我目前的做法正确吗?
- 有没有办法实例化模块类中的模型并将它们注入视图模型,如果是这样,网络上是否有任何示例?
查看 Prism 5 的 UI 组合快速入门 (http://msdn.microsoft.com/en-us/library/gg430879(v=pandp.40).aspx)。它完全符合您的要求。
1) 在引导程序中注册模块:
moduleCatalog.AddModule(typeof(EmployeeModule.ModuleInit));
2) 在模块安装中注册模型类型(如果您的模型是共享的,则在引导程序中注册)
this.container.RegisterType<IEmployeeDataService, EmployeeDataService>();
3) 通过构造函数将模型注入视图模型
public EmployeeListViewModel(IEmployeeDataService dataService, IEventAggregator eventAggregator) { }