【发布时间】:2015-04-20 06:07:33
【问题描述】:
我已经开始将 Microsoft 的 Prism 框架与 Unity 一起用于 WPF 应用程序,主要是为了自学一些新概念。
我一直在尝试了解依赖注入以及如何将 Unity 与我的视图模型一起使用,但我对自己所做的事情没有足够的把握,甚至无法真正问自己做错了什么。
因此,我将介绍我所处的场景,希望有人能帮助我了解我哪里出错了。
让我们考虑一个 EventAggregator 场景,其中 ModuleA 发布,ModuleB 订阅。在我的 ModuleA MainWindowViewModel 中,我会有一个像这样的类构造函数:
private IEventAggregator _eventAggregator;
public MainWindowViewModel(IEventAggregator eventAggregator) {
_eventAggregator = eventAggregator;
...
}
现在,当我注册我的 ModuleA MainWindowView 时,我会这样做:
public class ModuleA {
private readonly IRegionManager _regionManager;
public ModuleA(IRegionManager regionManager) {
_regionManager = regionManager;
}
public void Initialize() {
_regionManager.RegisterViewWithRegion("SomeRegion", typeof(MainWindowView));
}
}
然后,在我的项目的Bootstrapper.cs 中,我将创建我的ModuleCatalog:
public class Bootstrapper {
...
protected override void ConfigureModuleCatalog() {
base.ConfigureModuleCatalog();
ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
moduleCatalog.AddModule(typeof(ModuleA.ModuleA));
...
}
}
现在,我可以使用ServiceLocator 在我的 ViewModel 中实例化我的eventAggregator,但我正在尝试通过依赖注入来实现,用IUnityContainer 注册我的 ViewModel,然后根据需要注入我的 View。此外,我一直认为我实际上应该为我的 ViewModel 使用一个接口(即IMainWindowViewModel)来分离关注点。
有人能给我指出一个可能能够消除我明显困惑的资源吗?我已经阅读了 MSDN 的 Prism QuickStarts,包括 Advanced MVVM Scenarios,但我不明白如何将说明置于上下文中。
【问题讨论】:
标签: c# wpf mvvm dependency-injection unity-container