我的一些班级发送和接收相同类型的消息,我希望他们不要对他们发送的消息做出反应。
我现在看到的唯一方法是在发送消息之前显式发送给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
处理它。
您可以在消息中包含令牌,并且您想注册的位置还包括注册例程中的令牌。