如何使用/在何处使用 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);
}

这个实现给了我一个例外,我也找不到如何设置容器,以便模型注入以我尝试的方式工作。

我想做的是在模块类中实例化我的模型。从那里我想把它注入到我的视图模型中。

所以我的问题是:

  1. 我目前的做法正确吗?
  2. 有没有办法实例化模块类中的模型并将它们注入视图模型,如果是这样,网络上是否有任何示例?

如何使用/在何处使用 PRISM 和 Unity 在 MVVM 中实例化模型对象

查看 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) { }