0

我的一些班级发送和接收相同类型的消息,我希望他们不要对他们发送的消息做出反应。
我现在看到的唯一方法是发送者Unregister()在发送消息之前明确调用,然后在发送消息后再次调用Register()。这很好,但它需要相当多的样板代码。如果在收件人列表中找到发件人,如果信使忽略发件人
,那就太好了。Messenger.SendExceptSender(msg,sender)

IMessenger 是否以某种方式支持这一点?

4

2 回答 2

3

据我所知,这是不可能的。接口和实现都没有为此提供便利,因为他们甚至不知道发送者是谁。

最简单的方法是将发送者作为属性添加到消息中。Register这将大大减少样板代码,并且比Unregister多线程场景更安全。

您可以像这样注册您的消息:

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

如果这是您代码中的常见场景,您甚至可以为该属性创建一个接口或基类,并为其处理它Sender的扩展方法。RegisterSend

于 2012-12-12T13:41:45.823 回答
0

您可以在消息中包含令牌,并且在您想要注册的地方也可以在注册例程中包含令牌。

于 2012-12-13T08:40:59.583 回答