實際上,您可以從應用程序中的任何位置註冊收件人,而不僅僅是收件人的類。例如,請考慮以下情形:
public class ClassA : ViewModelBase
{
public ClassA()
{
Messenger.Default.Register<SomeMessage>(this, SomeAction);
Messenger.Default.Register<SomeMessage>(ViewModelLocator.ClassB, SomeAction);
}
private void SomeAction(SomeMessage msg)
{
// do something
}
}
public class ClassB : ViewModelBase
{
public ClassB()
{
}
}
在第二Registor
方法調用的情況下,工作的對象屬性將不會是相同的收件人蔘數。因此,爲了保持一致,始終需要收件人蔘數是最安全的。
當然,您認爲這種情況可能不如您僅僅通過this
作爲收件人的情形。因此,在這種情況下,如果輸入this
變得繁冗的你,那麼你總是可以定義它只是沿着實際Register
方法傳遞目標屬性自己Register
擴展方法:
public static class MessengerHelper
{
public static void Register<TMessage>(this IMessenger messenger, Action<TMessage> action)
{
messenger.Register<TMessage>(action.Target, action);
}
}
然後,您可以註冊類似的消息這個:
public class ClassA : ViewModelBase
{
public ClassA()
{
Messenger.Default.Register<SomeMessage>(SomeAction);
}
private void SomeAction(SomeMessage msg)
{
// do something
}
}
但是如何使用收件人價值?是不是隻有行動足以對綁定的消息作出反應?或者TDaver已經說過,這是一個通過單一呼叫註銷所有處理程序的工具。 –
如何使用收件人值?各種消息類具有對應於特定收件人的「目標」屬性。因此,如果您在發送消息之前設置了「目標」屬性,那麼只有該對象纔會收到消息。因此,消息系統需要您在調用「註冊」方法時指定收件人,以便將正確的消息發送給正確的收件人。如果您在註冊郵政服務時未給您的名字,您是否希望收到您的郵件? – bugged87
答案TDaver提供的解釋只是解釋了Messenger類提供的便利,因爲您的消息已經註冊到收件人。但是,它並沒有解釋收件人的目的。該目的僅用於在設置消息的目標屬性時查找正確的對象。 – bugged87