【问题标题】:UWP MvvmCross Bootstrap Class Not WorkingUWP MvvmCross 引导类不工作
【发布时间】:2016-03-23 15:35:31
【问题描述】:

设置:

  • MvvmCross 插件 Nuget:
    • 有一个可移植类库 w/典型的 PluginLoader.cs 包含mngr.EnsurePlatformAdaptionLoaded<...>()
    • 有一个 UWP 类库,其中包含典型的 Plugin.cs,其中包含 Mvx.RegisterType<...>() 调用
    • 打包并在 UI 项目中使用(下一个)
  • MvvmCross UI 项目:
    • 拥有可移植类库和 UWP UI 项目
    • 有一个Bootstrap.cs 文件,典型的public class TTSPluginBootstrap : MvxPluginBootstrapAction< MyPlugin.TTS.PluginLoader >
    • 有一个 Setup.cs 文件,典型的 CreateApp 返回 Core.App()

问题:

  • 在我的 UI 项目中包含 Bootstrap.cs 文件会导致 setup.Initialize() 在 App::OnLaunched 期间崩溃
  • 删除 Bootstrap.cs 允许 UWP UI 项目运行,但 Mvx.Resolve<...>() 调用会导致崩溃
  • 我也尝试在 nuget 打包过程中包含 *.pri 和 *.rd.xml 文件,但无济于事。

当前解决方法:

  • 删除 Bootstrap.cs(或将构建类型设置为 Content)
  • 覆盖Setup::LoadPlugins:
    • 要么使用Mvx.RegisterType<...> 手动强制类型注册,但这种方式违背了目的。
    • 或者实例化MyPlugin.Uwp.Plugin,然后调用Load就可以了

问题:

  • 如果我能够实例化 Plugin 类并对其调用 Load,那么 Bootstrap 反射如何/为什么找不到 PluginLoader?
  • 我也尝试过使用 AoT 方法来声明我的 Bootstrap 类,那么还有什么可以尝试的呢?
  • 在创建/使用 UWP MvvmCross 插件(例如 NOT phone/store/8.1)方面是否有很好的参考?

【问题讨论】:

  • 有谁知道任何成功使用 UWP nuget(例如 NOT WindowsCommon、wpa8、win8)的 UWP UI 应用程序? @Cheesebaron 有一个 DeviceInfo 插件,它可以被 UWP 应用程序使用,但仅归功于他的 WindowsCommon 库。它的 WindowsUWP 部分不执行任何操作。

标签: mvvm xamarin nuget mvvmcross nuspec


【解决方案1】:

解决方案(以及实现目标所采取的步骤):

  • 第 1 步:克隆 MvvmCross 存储库,并将分支更新为我在项目中使用的版本
  • 第 2 步:删除 NuGet 引用,并将本地程序集引用替换为 MvvmCross 克隆
  • 第 3 步:在 App.xaml.cs 中调用 setup.Initialize() 之前逐步执行代码
  • 发现: 在内部,MvvmCross 使用反射来获取PluginLoader 实例,然后找到Setup 类(包含Load 方法,在特定于平台的插件代码中)。
    • 此 MvvmCross 反射具有命名约定要求。
  • 修复:制作兼容 UWP 的 MvvmCross 插件时,您的 UWP 类库项目必须以“WindowsUWP”(或“WindowsCommon”,如果可移植)结尾
    • 对我来说,这意味着将我的 NuGet 的 Plugin.TTS.Uwp 命名空间(和文件夹)更改为 Plugin.TTS.WindowsUwp,然后重新打包和分发我的 *.nupkg

【讨论】:

  • 如果为 MvvmCross UWP 项目和插件发布了相关文档/教程,请发布,我很乐意接受引用该内容的另一个答案。
猜你喜欢
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
  • 2014-11-02
  • 2017-04-20
  • 1970-01-01
相关资源
最近更新 更多