2016-07-05 2 views
8

Я обновил версию MvvmCross версии 4.2.1 с версии 4.2.0 через NuGet, и теперь проект Android вылетает во время запуска. MvxException брошено во заставках с сообщением:Вы должны позвонить EnsureLoaded в плагин File перед использованием DownloadCache

MvvmCross.Platform.Exceptions.MvxException: Вы должны вызвать EnsureLoaded на плагин Файл перед использованием DownloadCache

Я на самом деле звоню это метод в MvxAppCompatSetup.InitializeLastChance переопределить. Это работало хорошо для меня с версией 4.2.0, но теперь код даже не ударил InitializeLastChance при запуске версии 4.2.1.

protected override void InitializeLastChance() 
{ 
    base.InitializeLastChance(); 
    MvvmCross.Plugins.File.PluginLoader.Instance.EnsureLoaded(); 
    MvvmCross.Plugins.DownloadCache.PluginLoader.Instance.EnsureLoaded(); 
} 

Я не могу переместить EnsureLoaded звонки в InitializeFirstChance, потому что я получаю исключение, потому что плагины еще не были инициализированы

Не удалось разрешить тип MvvmCross.Platform.Plugins.IMvxPluginManager

MvxSetup.InitializePluginFramework, похоже, выбрасывает это исключение, когда вызывается InitializePluginFramework.

NuGet отображается сообщениями об ошибках для каждого плагина я установил во время обновления:

[Отказ] Не удался подать файл»... \ Project.Droid \ Bootstap \ XXXBootstrap.cs'

Файлы, безусловно, есть, и пакет устанавливается без сообщения об ошибке.

Каков правильный способ решения этой проблемы?

ответ

5

Попробуйте удалить DownloadCachePluginBootstrap.cs и FilePluginBootstrap.cs, просто оставите ручную настройку внутри InitializeLastChance(). Кажется, что есть проблема с порядком загрузки.

+0

Это похоже на проблему. –

+0

. Остановившись, удалив вышеуказанные файлы из папки Bootstrap и явно определив порядок загрузки в методе InitializeLastChance(), похоже, это решит проблему. Подробнее о InitializeLastChance вы можете найти в [Индивидуальные настройки] (https: // github.com/MvvmCross/MvvmCross/wiki/Customizing-using-App-and-Setup) – JohnnyJaxs

+1

Для тех, кто теперь сталкивается с MvxException: не удалось найти плагин-загрузчик для типа MvvmCross.Plugins.File.PluginLoader, здесь описано более длинное обходное решение https: //github.com/MvvmCross/MvvmCross-Plugins/issues/119#issuecomment-233129197 – foxanna

3

Как @Piotr упоминалось:

Попробуйте удалить DownloadCachePluginBootstrap.cs и FilePluginBootstrap.cs просто оставить настройку вручную внутри InitializeLastChance(). Кажется, что есть проблема с порядком загрузки.

Это исправило проблему и для меня.

Я просто хочу поделиться своим кодом в Setup.cs проекта iOS, потому что я считаю, что это лучшая реализация. Я не использовал InitializeLastChance(). Вместо этого я использовал AddPluginsLoaders и LoadPlugins.

protected override void AddPluginsLoaders(MvxLoaderPluginRegistry registry) 
    { 
     registry.Register<MvvmCross.Plugins.File.PluginLoader, MvvmCross.Plugins.File.iOS.Plugin>(); 
     registry.Register<MvvmCross.Plugins.DownloadCache.PluginLoader, MvvmCross.Plugins.DownloadCache.iOS.Plugin>(); 
     base.AddPluginsLoaders(registry); 
    } 

    public override void LoadPlugins(IMvxPluginManager pluginManager) 
    { 
     pluginManager.EnsurePluginLoaded<MvvmCross.Plugins.File.PluginLoader>(); 
     pluginManager.EnsurePluginLoaded<MvvmCross.Plugins.DownloadCache.PluginLoader>(); 
     base.LoadPlugins(pluginManager); 
    }