Search code examples
c#visual-studiomvvmmvvmcross

MvvmCross usage of IMvxMessenger


I want to use the IMvxMessenger Plugin, but i cant initialize a viewmodel where I want to use it.

my Core.ViewModels

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

my 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);
    }
}

my messenger model

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

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

The error

"Failed to resolve parameter for parameter messenger of type IMvxMessenger when creating WPFCore.ViewModels.DataViewModel. You may pass it as an argument"

I also tried some Initialization, but it doesnt work or show some errors;

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

Solution

  • Please make sure the plugin has been loaded. You can do that by overriding LoadPlugins in Setup.cs and add:

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