我正在开发 MVVMCross v3,我想创建自己的插件,我遵循了本教程(适用于 vNext)
http://slodge.blogspot.fr/2012/10/build-new-plugin-for-mvvmcrosss.html
为了与 v3 兼容,我将 IMvxServiceConsumer 和 GetService 更改为 Mvx.Resolve。
但是教程上有:
然后,对于 WinRT、WindowsPhone 和 MonoTouch 客户端,您还需要在 setup.cs 中提供一个 Loader 访问器——例如:
protected override void AddPluginsLoaders(Cirrious.MvvmCross.Platform.MvxLoaderPluginRegistry loaders)
{
loaders.AddConventionalPlugin<MyCompany.MvvmCross.Plugins.Mega.WindowsPhone.Plugin>();
base.AddPluginsLoaders(loaders);
}
我如何在 v3 中做到这一点?
谢谢
最佳答案
如果你想写一个新的插件,那么:
- 最新样本是https://github.com/slodge/MvvmCross-Tutorials/tree/master/GoodVibrations
- 在 https://speakerdeck.com/cirrious/plugins-in-mvvmcross 中有关于此示例的一些注释
对于插件初始化,nuget 包现在通过 Bootstrap 文件执行此操作 - 例如查看为位置添加的文件:
- (WinRT、WinPhone、Droid)- https://github.com/slodge/NPlus1DaysOfMvvmCross/blob/master/N-08-Location/Location.Droid/Bootstrap/LocationPluginBootstrap.cs
- (触摸)- https://github.com/slodge/NPlus1DaysOfMvvmCross/blob/master/N-08-Location/Location.Touch/Bootstrap/LocationPluginBootstrap.cs
bootstrap 方式是现在进行初始化的正常方式。
如果您确实想使用非引导技术,那么您可以这样做:
- 在 WinRT、WinPhone 和 Droid 中,您不需要使用加载器,但您需要调用
MyPlugin.PluginManager.Instance.EnsureLoaded
在插件可以使用之前。 - 在 Touch 中,您需要在
protected override void AddPluginsLoaders(MvxLoaderPluginRegistry loaders)
期间提供加载程序- 并且您仍然需要调用EnsureLoaded()
在插件可以使用之前。
有关这种“老式”工作方式的示例,请参阅 Setup.cs
在 https://github.com/slodge/MvvmCross-Tutorials/tree/master/Sample%20-%20TwitterSearch 中的 UI 项目中
关于mvvmcross - MVVMCross 中的自定义插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16788164/