#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>();