哪里是注册负责显示窗口的Messenger的好地方,以确保MVVM模式分离的关注点和可测试性不受侵犯?
情景: 主窗口有一个与AboutWindow相关的菜单 关于Meny由以下命令触发:哪里是注册负责显示窗口的Messenger的好地方,以确保MVVM模式分离的关注点和可测试性不受侵犯?,mvvm,mvvm-light,separation-of-concerns,Mvvm,Mvvm Light,Separation Of Concerns,情景: 主窗口有一个与AboutWindow相关的菜单 关于Meny由以下命令触发: <MenuItem Header="_About" Command="{Binding OpenAbout}"/> 通知消息已在App.cs类中注册,如下所示: static App() { DispatcherHelper.Initialize(); } public App() {
<MenuItem Header="_About" Command="{Binding OpenAbout}"/>
通知消息已在App.cs类中注册,如下所示:
static App()
{
DispatcherHelper.Initialize();
}
public App()
{
RegisterMessenger();
}
public void RegisterMessenger()
{
Messenger.Default.Register<NotificationMessage>(this, ProcessShowAboutView);
}
private void ProcessShowAboutView(NotificationMessage message)
{
AboutWindow view = new AboutWindow();
view.Show();
}
static App()
{
DispatcherHelper.Initialize();
}
公共应用程序()
{
RegisterMessenger();
}
公共作废登记员()
{
Messenger.Default.Register(这是ProcessShowAboutView);
}
私有无效进程ShowAboutView(通知消息)
{
AboutWindow视图=新的AboutWindow();
view.Show();
}
我分析了其他类似的问题:
private RelayCommand _openAbout;
public RelayCommand OpenAbout
{
get
{
return _openAbout ?? (_openAbout = new RelayCommand(() => Messenger.Default.Send(new NotificationMessage("ShowAboutView"))));
}
}
我喜欢Messenger的功能,但我不确定上述解决方案是否是一个好的解决方案。
如果有任何建议,我将不胜感激
如上所述,在App Config中注册消息。
我认为这不是一个好地方,所以我需要知道什么地方会更好。
另一个考虑的地方是定位器< /P> < P>我将登记在<代码> App.xAML.Cs<代码>中的代码> OnStudio< /Co> >方法(WPF)和单元测试的设置方法(不要忘记在拆解方法中注销所有内容)。p> 感谢您的快速响应,您认为此解决方案比ViewModelLocator的构造函数好吗?你能指出你的建议的优点吗?还有另一个方面:既然我知道如何创建窗口,那么关闭它们怎么样?是否也应该在App.xaml.cs中完成?对于这种已知的问题,有什么好的做法吗?
App
构造函数是注册消息处理程序的理想场所。