MVVMCross与MVVM Light的Messenger.Default
实例是否相同(对于Xamarin.iOS中不符合MVVM的独立项目)。
我决定将“MvvmCross Messenger”插件添加到PCL和iOS项目中。以为我必须注册Hub并通过类似
的方式从PCL和iOS项目中解决它// Registering in ViewDidLoad() of iOS project
Mvx.RegisterSingleton<IMvxMessenger>(new MvxMessengerHub());
// Try to resolve and subscribe in PCL and iOS project - both have nuget packages added
_messenger = Mvx.Resolve<IMvxMessenger> ();
_token = _messenger.SubscribeOnMainThread<MyMessage> ((message) => {
OutputLabel.Text = message.Number;
});
但是我在Mvx.RegisterSingleton
处获得了一个空引用异常。不太确定我错过了什么。我正在寻找的就是使用Messenger。不要在此项目中立即使用MVVM的任何其他部分
答案 0 :(得分:2)
在MvvmCross中,我们将messenger设为可选 - 所以它在插件中。
如果您想独立使用它,那么您可以使用CrossLight演示中显示的代码启动插件系统 - 请参阅http://mvvmcross.blogspot.co.uk/中的N = 30和N = 39 - 并查看仅限android的演示在https://github.com/MvvmCross/MvvmCross-Tutorials/blob/master/CrossLight/PluginUse/NoBinding/Setup.cs
对于iOS,您可能需要一些一次性初始化代码,例如:
if (MvxSimpleIoCContainer.Instance != null)
return;
var ioc = MvxSimpleIoCContainer.Initialize();
ioc.RegisterSingleton<IMvxTrace>(new MvxDebugOnlyTrace());
var manager = new MvxLoaderPluginManager();
var registry = new MvxLoaderPluginRegistry(".Touch", manager);
ioc.RegisterSingleton<IMvxPluginManager>(manager);
或者......如果你不想要Mvx代码用于绑定,调度程序等,那么使用像TinyMessenger这样的优秀东西可能更容易 - https://github.com/grumpydev/TinyMessenger