MvvmCross использование IMvxMessenger

#c# #visual-studio #mvvm #mvvmcross

#c# #visual-studio #mvvm #mvvmcross

Вопрос:

Я хочу использовать плагин IMvxMessenger, но я не могу инициализировать viewmodel там, где я хочу его использовать.

мое ядро.ViewModels

 public class DataViewModel : MvxNavigationViewModel
    {
            protected readonly IMvxMessenger _messenger;
    
            public DataViewModel(IMvxLogProvider logProvider, IMvxNavigationService navigationService, IMvxMessenger messenger)
                : base(logProvider, navigationService)
            {
                this._messenger = messenger;
            }
    }
  

мой WPFCore.ViewModels

 public class DataViewModel : Core.ViewModels.DataViewModel
{
    public DataViewModel(IMvxLogProvider logProvider, IMvxNavigationService navigationService, IMvxMessenger messenger)
            : base(logProvider, navigationService, messenger)
        {}

    protected new void SaveDyno()
    {
        var message = new Core.Models.MvxReloaderMessage(this, this.Dyno);
        this._messenger.Publish(message);
    }
}
  

моя модель мессенджера

  public class MvxReloaderMessage
      : MvxMessage
    {
        public DynoModel Dyno
        {
            get;
            private set;
        }

        public MvxReloaderMessage(object sender, DynoModel dyno)
            : base(sender)
        {
            this.Dyno = dyno;
        }
    }
  

Ошибка

«Не удалось разрешить параметр для параметра messenger типа IMvxMessenger при создании WPFCore.ViewModels.DataViewModel. Вы можете передать это в качестве аргумента»

Я также пробовал некоторую инициализацию, но она не работает или показывает некоторые ошибки;

 Mvx.RegisterType<IMvxMessenger, MvxReloaderMessage>();
Mvx.IoCProvider.RegisterSingleton<MvvmCross.Plugin.Messenger.IMvxMessenger>(new Core.Models.MvxReloaderMessage());
Mvx.IoCProvider.Resolve<MvvmCross.Plugin.Messenger.IMvxMessenger>();
  

Ответ №1:

Пожалуйста, убедитесь, что плагин был загружен. Вы можете сделать это, переопределив LoadPlugins в Setup.cs и добавив:

 pluginManager.EnsurePluginLoaded<MvvmCross.Plugin.Messenger.Plugin>();