2012-12-12 97 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

您可以在消息中包含令牌,並且您想註冊的位置還包括註冊例程中的令牌。

相關問題