Messenger
クラスを使用する適切な方法は何ですか? ViewModels/Views通信に使用できることは知っていますが、技術/ビジネスサービス層で使用するのは良いアプローチですか?MVVM Light Messengerを適切に使用する方法
例えば、ロギング/ナビゲーションサービスでは、コンストラクタ内にいくつかのメッセージが登録され、これらのメッセージがいつアプリケーションで発生するかが分かります。送信者(ViewModel ou Service)はサービスインタフェースを参照せず、メッセージを送信するためのメッセンジャーのみを参照します。ここにはサンプルサービスがあります:
using System;
using System.Windows;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using App.Service.Interfaces;
using GalaSoft.MvvmLight.Messaging;
namespace App.Service
{
public class NavigationService : INavigationService
{
private PhoneApplicationFrame _mainFrame;
public event NavigatingCancelEventHandler Navigating;
public NavigationService()
{
Messenger.Default.Register<NotificationMessage<Uri>>(this, m => { this.NavigateTo(m.Content); });
}
public void NavigateTo(Uri pageUri)
{
if (EnsureMainFrame())
{
_mainFrame.Navigate(pageUri);
}
}
public void GoBack()
{
if (EnsureMainFrame()
&& _mainFrame.CanGoBack)
{
_mainFrame.GoBack();
}
}
private bool EnsureMainFrame()
{
if (_mainFrame != null)
{
return true;
}
_mainFrame = Application.Current.RootVisual as PhoneApplicationFrame;
if (_mainFrame != null)
{
// Could be null if the app runs inside a design tool
_mainFrame.Navigating += (s, e) =>
{
if (Navigating != null)
{
Navigating(s, e);
}
};
return true;
}
return false;
}
}
}
さらに読む:[グローバルな出来事は有害だと思う](http://dkturner.blogspot.hu/2010/06/global-events-considered-harmful.html) – nemesv
ありがとうございました。 MVVM Messengerに固有のものではありません – Cybermaxs