実際には、受信者であるクラスだけでなく、アプリケーションのどこからでも特定のメッセージの受信者を登録できます。たとえば、次のシナリオについて考えてみます。
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()
{
}
}
2番目のRegistor
メソッド呼び出しの場合、アクションのTargetプロパティは受信者パラメーターと同じではありません。したがって、一貫性を保つために、常に受信者パラメータを要求する方が安全である可能性が最も高いです。
もちろん、このシナリオは、単にthis
受信者として渡すシナリオよりもおそらく一般的ではないというのは正しいことです。したがって、その場合、入力this
が煩わしい場合は、Targetプロパティを実際のメソッド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
}
}