我一直在使用MvvmCross v1一段时间了,&我发现它非常有用&不太难用!所以我咬了一下子弹。决定将vnext用于我们的下一个项目。一切都很好,直到我尝试使用插件,它崩溃与以下输出 -
2013-03-21 18:14:27.121 MyApp[85942:11903] mvx: Diagnostic: 0,00 Setup: Text serialization start
2013-03-21 18:14:27.124 MyApp[85942:11903] mvx: Diagnostic: 0,03 Setup: PlatformServices start
2013-03-21 18:14:27.125 MyApp[85942:11903] mvx: Diagnostic: 0,03 Setup: ViewModelFramework start
2013-03-21 18:14:27.126 MyApp[85942:11903] mvx: Diagnostic: 0,03 Setup: PluginManagerFramework start
2013-03-21 18:14:27.127 MyApp[85942:11903] mvx: Diagnostic: 0,03 Setup: App start
Unhandled Exception:
0 MyApp 0x00079b12 mono_handle_exception_internal_first_pass + 3058
1 MyApp 0x0007b1e2 mono_handle_exception_internal + 1602
2 MyApp 0x0007bd2f mono_handle_exception + 47
3 MyApp 0x000bce22 mono_x86_throw_exception + 306
4 ??? 0x07986f8f 0x0 + 127430543
at Cirrious.MvvmCross.Plugins.MvxBasePluginManager.ExceptionWrappedLoadPlugin (System.Type) <IL 0x00002, 0x0001f>
at Cirrious.MvvmCross.Plugins.MvxBasePluginManager.EnsureLoaded<T> () <IL 0x00030, 0x0008c>
at Cirrious.MvvmCross.Plugins.Share.PluginLoader.EnsureLoaded () <IL 0x00008, 0x00029>
at MyApp.Core.BaseApp.InitialisePlugins () [0x00000] in /Users/franklyn/Documents/Programming/MyApp/MyApp.Core/App.cs:42
每当我尝试加载一个具有“Touch”项目元素的插件时,就会发生这种情况,其他如JsonLocalisation插件没有,加载正常。
如果有其他人遇到这个&amp;知道修复,我很高兴收到他们的来信。
答案 0 :(得分:2)
对于Android,加载插件只是因为它们在那里 - 它们是文件,可以通过Assembly.Load
加载
对于iOS,由于前期编译要求,无法以这种方式加载插件。
要解决此问题,必须在安装过程中注册iOS中所有特定于平台的插件。
您可以在所有示例的AddPluginLoaders
中的Setup
中看到此代码 - 请参阅https://github.com/slodge/MvvmCross/blob/vnext/Sample%20-%20TwitterSearch/TwitterSearch.UI.Touch/Setup.cs
protected override void AddPluginsLoaders(MvxLoaderPluginRegistry registry)
{
registry.AddConventionalPlugin<Cirrious.MvvmCross.Plugins.Visibility.Touch.Plugin>();
registry.AddConventionalPlugin<Cirrious.MvvmCross.Plugins.File.Touch.Plugin>();
registry.AddConventionalPlugin<Cirrious.MvvmCross.Plugins.DownloadCache.Touch.Plugin>();
base.AddPluginsLoaders(registry);
}
总的来说,插件机制比旧v1
代码好得多,因为它意味着您的应用程序中包含的不需要的代码更少,因为它是可扩展的。
最近有关为什么Assembly.Load
无法在iOS中使用的讨论,请参阅http://forums.xamarin.com/discussion/comment/7882 - 我试图避免这一步。