我的一些班级发送和接收相同类型的消息,我希望他们不要对他们发送的消息做出反应。
我现在看到的唯一方法是发送者Unregister()
在发送消息之前明确调用,然后在发送消息后再次调用Register()
。这很好,但它需要相当多的样板代码。如果在收件人列表中找到发件人,如果信使忽略发件人
,那就太好了。Messenger.SendExceptSender(msg,sender)
IMessenger 是否以某种方式支持这一点?
我的一些班级发送和接收相同类型的消息,我希望他们不要对他们发送的消息做出反应。
我现在看到的唯一方法是发送者Unregister()
在发送消息之前明确调用,然后在发送消息后再次调用Register()
。这很好,但它需要相当多的样板代码。如果在收件人列表中找到发件人,如果信使忽略发件人
,那就太好了。Messenger.SendExceptSender(msg,sender)
IMessenger 是否以某种方式支持这一点?
据我所知,这是不可能的。接口和实现都没有为此提供便利,因为他们甚至不知道发送者是谁。
最简单的方法是将发送者作为属性添加到消息中。Register
这将大大减少样板代码,并且比Unregister
多线程场景更安全。
您可以像这样注册您的消息:
messenger.Register(this, m => {
if(m.Sender == this)
return;
YourMessageHandler(m);
} );
如果这是您代码中的常见场景,您甚至可以为该属性创建一个接口或基类,并为其处理它Sender
的扩展方法。Register
Send
您可以在消息中包含令牌,并且在您想要注册的地方也可以在注册例程中包含令牌。