Обработка событий MediatR в приложении WPF

#c# #wpf #mediator #mediatr

Вопрос:

Я рефакторирую свое приложение WPF для медиаплеера, чтобы использовать CQR и MediatR. Я начал с реализации команды Play, которая работает нормально. Теперь я хотел бы отправить событие обратно в главное окно после запуска воспроизведения и обновить пользовательский интерфейс. Раньше у меня просто был статический класс для отправки событий, и MainWindow подписывался на такие события, как это:

 PlaybackManager.OnStartPlayback  = PlaybackController_OnStartPlayback;
 

Я хотел бы продолжать подписываться на события так же просто, как это было. С MediatR я должен реализовать интерфейс INotificationHandlerInterface. Я сделал это, добавив следующее в свое главное окно:

 public Task Handle(PlaybackStartedEvent notification, CancellationToken cancellationToken)
{
    Dispatcher.Invoke(() =>
    {
        TabView.SelectedIndex = 1;
    });
    return Task.CompletedTask;
}
 

Проблема в том, что MediatR создает новый экземпляр обработчика при запуске события, поэтому «реальное» главное окно никогда не получает событие. Существует ли известное решение этой проблемы, другими словами, простой способ подписаться на уведомления MediatR и иметь возможность обрабатывать события с помощью существующего экземпляра главного окна?