2

设置:

  • MvvmCross 插件 Nuget:
    • 有一个带有典型 PluginLoader.cs的可移植类库,其中包含mngr.EnsurePlatformAdaptionLoaded<...>()
    • 具有包含调用的典型 Plugin.cs的UWP 类库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 proj 运行,但Mvx.Resolve<...>()调用会导致崩溃
  • 我还尝试在 nuget 打包过程中包含 *.pri 和 *.rd.xml 文件,但无济于事。

当前的解决方法:

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

问题):

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

1 回答 1

0

解决方案(以及到达那里所采取的步骤):

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