【问题标题】:You must call EnsureLoaded on the File plugin before using the DownloadCache在使用 DownloadCache 之前,您必须在 File 插件上调用 EnsureLoaded
【发布时间】:2016-08-10 09:12:36
【问题描述】:

我已通过 NuGet 从 4.2.0 版更新到 MvvmCross 4.2.1 版,现在 Android 项目在启动期间崩溃。在初始屏幕期间抛出 MvxException 并显示以下消息:

MvvmCross.Platform.Exceptions.MvxException:您必须调用 EnsureLoaded 在使用 DownloadCache 之前的 File 插件上

我实际上是在MvxAppCompatSetup.InitializeLastChance 覆盖中调用此方法。这对我来说在 4.2.0 版上运行良好,但现在在运行 4.2.1 版时代码甚至没有命中 InitializeLastChance

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'

文件肯定在那里,并且安装包没有报告错误。

处理这个问题的正确方法是什么?

【问题讨论】:

    标签: mvvmcross


    【解决方案1】:

    尝试删除 DownloadCachePluginBootstrap.cs 和 FilePluginBootstrap.cs,只需在 InitializeLastChance() 中保留手动设置。加载顺序好像有问题。

    【讨论】:

    • 这似乎解决了问题。
    • 好的,通过从 Bootstrap 文件夹中删除上述文件并在 InitializeLastChance() 方法中明确定义加载顺序,似乎可以解决问题。有关 InitializeLastChance 的更多信息,请访问 Individual customisations
    • 对于那些现在面临 MvxException 的人:找不到类型 MvvmCross.Plugins.File.PluginLoader 的插件加载器,这里描述了一个更长的解决方法github.com/MvvmCross/MvvmCross-Plugins/issues/…
    【解决方案2】:

    正如@Piotr 所说:

    尝试删除 DownloadCachePluginBootstrap.cs 和 FilePluginBootstrap.cs 只是 在 InitializeLastChance() 中保留手动设置。好像有一个 加载顺序有问题。

    这也解决了我的问题。

    我只想在 iOS 项目的 Setup.cs 中分享我的代码,因为我认为这是一个更好的实现。我没有使用 InitializeLastChance()。相反,我使用 AddPluginsLoadersLoadPlugins

        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);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      • 2017-04-04
      • 1970-01-01
      相关资源
      最近更新 更多