我的问题的原因是: 我想避免使用EventAggregator-Pattern,因为我认为它使代码难以理解和调试。
我没有使用EventAggregator,而是尝试创建一个ShellViewModel并注入两个ViewModel,它们应该出于某种原因连接在一起:
public ShellViewModel(DocumentViewModel documentViewModel, ToolsViewModel toolsViewModel)
{
...
}
我现在面临的问题是,documentViewModel和toolsViewModel创建了两次:
在我的Bootstrapper中:
protected override DependencyObject CreateShell()
{
return Container.Resolve<Shell>(); //this implicitly calls the ctors of my viewmodels
}
在我的模块中:
public void Initialize()
{
//This calls create the ViewModels again
regionViewRegistry.RegisterViewWithRegion("ToolRegion", typeof(Views.ToolsView));
regionViewRegistry.RegisterViewWithRegion("MainRegion", typeof(Views.DocumentView));
}
我怎样才能避免构造函数被调用两次? 如果这是错误的想法,我如何在同一模块中连接视图模型的事件?
修改(已解决):
public ShellViewModel(IDocumentViewModel documentViewModel, IToolsViewModel toolsViewModel)
{
...
}
和
protected override void ConfigureContainer()
{
base.ConfigureContainer();
RegisterTypeIfMissing(typeof (IToolsViewModel), typeof (ToolsViewModel), true);
RegisterTypeIfMissing(typeof(IDocumentViewModel), typeof(DocumentViewModel), true);
}
做了这个伎俩。创建视图模型的接口并注册接口是必要的。否则Unity将始终创建一个新实例。
答案 0 :(得分:0)
public ShellViewModel(IDocumentViewModel documentViewModel, IToolsViewModel toolsViewModel)
{
...
}
和
protected override void ConfigureContainer()
{
base.ConfigureContainer();
RegisterTypeIfMissing(typeof (IToolsViewModel), typeof (ToolsViewModel), true);
RegisterTypeIfMissing(typeof(IDocumentViewModel), typeof(DocumentViewModel), true);
}
做了这个伎俩。有必要创建视图模型的接口并注册接口。否则Unity将始终创建一个新实例。