如果我将来自ViewModelA的消息定位到ViewModelB,是否有办法从我的单元测试中捕获此通知,该单元测试正在测试引发Message的ViewModelA?
Messenger.Default.Send<string, ViewModelB>("Something Happened");
答案 0 :(得分:6)
我看到两个选项:
首先,您可以使用“标记”界面标记ViewModelB,并使用它而不是实际的类名。
Messenger.Default.Send<string, IMessageTarget>("Something Happened");
这不是我最喜欢的解决方案,但应该有效。
或者,您可以在从ViewModelA发送消除歧义的消息时在ViewModelB中注册具有特定令牌的消息:
在ViewModelA中:
Messenger.Default.Send<string>("Something Happened", "MessageDisambiguator");
在ViewModelB中:
Messenger.Default.Register<string>(
this,
"MessageDisambiguator",
(action) => DoWork(action)
);
更清洁,并且仍然允许您模拟ViewModelB用于测试目的。
可能有更多的选择,但这些是在这个晚些时候突然出现的问题......