UWP MvvmCross Bootstrap Class 不工作
UWP MvvmCross Bootstrap Class Not Working
设置:
- MvvmCross 插件 Nuget:
- 有一个便携式class库w/typicalPluginLoader.cs包含
mngr.EnsurePlatformAdaptionLoaded<...>()
- 有一个 UWP class lib w/typical Plugin.cs 包含
Mvx.RegisterType<...>()
个调用
- 打包,并用于 UI 项目(下一个)
- MvvmCross UI 项目:
- 有一个便携式class库和UWP UI项目
- 有一个 Bootstrap.cs 文件,典型的
public class TTSPluginBootstrap : MvxPluginBootstrapAction< MyPlugin.TTS.PluginLoader >
- 有一个 Setup.cs 文件,w/typical
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
问题:
- 如果我能够实例化插件 class,并在其上调用 Load,那么 how/why 是 Bootstrap 反射找不到 PluginLoader 吗?
- 我也尝试过声明我的 Bootstrap class 的 AoT 方式,那么还有什么可以尝试的呢?
- 在 creating/consuming UWP MvvmCross 插件(例如 NOT phone/store/8.1)的某处是否有很好的参考资料?
解决方案(以及实现的步骤):
- 第 1 步:克隆 MvvmCross 存储库,并将分支更新为我在项目中使用的版本
- 第 2 步:删除了 NuGet 引用,并将 w/local 程序集引用替换为 MvvmCross 克隆
- 第 3 步:在
setup.Initialize()
调用 App.xaml.cs 之前单步执行代码
- 查找: 在内部,MvvmCross 使用反射获取
PluginLoader
实例,随后查找 Setup
class(包含 Load
方法,在特定于平台的插件代码中)。
- 这个MvvmCross反射有命名约定要求。
- 修复:制作与 UWP 兼容的 MvvmCross 插件时,您的 UWP class lib 项目必须以 "WindowsUWP"(或"WindowsCommon",如果便携)
- 对我来说,这意味着将我的 NuGet 的
Plugin.TTS.Uwp
命名空间(和文件夹)更改为 Plugin.TTS.WindowsUwp
,然后重新打包和分发我的 *.nupkg
设置:
- MvvmCross 插件 Nuget:
- 有一个便携式class库w/typicalPluginLoader.cs包含
mngr.EnsurePlatformAdaptionLoaded<...>()
- 有一个 UWP class lib w/typical Plugin.cs 包含
Mvx.RegisterType<...>()
个调用 - 打包,并用于 UI 项目(下一个)
- 有一个便携式class库w/typicalPluginLoader.cs包含
- MvvmCross UI 项目:
- 有一个便携式class库和UWP UI项目
- 有一个 Bootstrap.cs 文件,典型的
public class TTSPluginBootstrap : MvxPluginBootstrapAction< MyPlugin.TTS.PluginLoader >
- 有一个 Setup.cs 文件,w/typical
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
- 或者使用
问题:
- 如果我能够实例化插件 class,并在其上调用 Load,那么 how/why 是 Bootstrap 反射找不到 PluginLoader 吗?
- 我也尝试过声明我的 Bootstrap class 的 AoT 方式,那么还有什么可以尝试的呢?
- 在 creating/consuming UWP MvvmCross 插件(例如 NOT phone/store/8.1)的某处是否有很好的参考资料?
解决方案(以及实现的步骤):
- 第 1 步:克隆 MvvmCross 存储库,并将分支更新为我在项目中使用的版本
- 第 2 步:删除了 NuGet 引用,并将 w/local 程序集引用替换为 MvvmCross 克隆
- 第 3 步:在
setup.Initialize()
调用 App.xaml.cs 之前单步执行代码
- 查找: 在内部,MvvmCross 使用反射获取
PluginLoader
实例,随后查找Setup
class(包含Load
方法,在特定于平台的插件代码中)。- 这个MvvmCross反射有命名约定要求。
- 修复:制作与 UWP 兼容的 MvvmCross 插件时,您的 UWP class lib 项目必须以 "WindowsUWP"(或"WindowsCommon",如果便携)
- 对我来说,这意味着将我的 NuGet 的
Plugin.TTS.Uwp
命名空间(和文件夹)更改为Plugin.TTS.WindowsUwp
,然后重新打包和分发我的 *.nupkg
- 对我来说,这意味着将我的 NuGet 的