MvvmCross vnext - 插件问题

时间:2013-03-21 18:25:57

标签: plugins xamarin.ios mvvmcross

我一直在使用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;知道修复,我很高兴收到他们的来信。

1 个答案:

答案 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 - 我试图避免这一步。