2012-12-12 60 views
0

我的一些班级发送和接收相同类型的消息,我希望他们不要对他们发送的消息做出反应。
我现在看到的唯一方法是在发送消息之前显式发送给Unregister()的呼叫,然后在发送消息之后再次呼叫Register()。这很好,但它需要相当多的样板代码。
如果在收件人列表中发现收件人,它将忽略发件人,如Messenger.SendExceptSender(msg,sender)
如何不让发件人收到它发送的邮件?

IMessenger是否支持这种方式?

回答

3

据我所知,这是不可能的。界面和实现都没有这方面的功能,因为他们甚至不知道发件人是谁。

最简单的方法是将发件人作为属性添加到邮件中。这将大大减少样板代码,并且在多线程场景下比RegisterUnregister更安全。

你可以注册你的消息,像这样:

messenger.Register(this, m => { 
            if(m.Sender == this) 
             return; 
            YourMessageHandler(m); 
           }); 

如果这是你的代码中常见的场景,你甚至可以创建为Sender性能和扩展方法的接口或基类RegisterSend处理它。

0

您可以在消息中包含令牌,并且您想注册的位置还包括注册例程中的令牌。

相关问题