Правильный способ использования MVVM Light Messenger

Как правильно использоватьMessenger учебный класс ? Я знаю, что его можно использовать для связи с ViewModels / Views, но является ли это хорошим подходом для использования его на уровне технических / бизнес-сервисов?

Например, служба регистрации / навигации регистрирует некоторые сообщения в конструкторах и знает, когда эти сообщения появляются в приложении. Отправитель (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;
        }
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос