实际上,您可以从应用程序中的任何位置注册收件人,而不仅仅是收件人的类。例如,请考虑以下情形:
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