MvxLoaderPluginRegistry.AddConventionalPlugin
后, 4.1.4
缺失。现在我可以看到一组或Register
方法具有不同的签名:
如何在更新后加载插件?
答案 0 :(得分:3)
插件通过Bootstrappers
加载。这些引导程序会自动安装文件夹Bootstrap
中的MvvmCross插件。当您通过NuGet安装插件时,$rootnamespace
将替换为目标项目的根命名空间。
iOS Bootstrapper
继承自MvxLoaderPluginBootstrapAction
。
namespace $rootnamespace$.Bootstrap
{
public class BlePluginBootstrap
: MvxLoaderPluginBootstrapAction<MvvmCross.Plugins.BLE.PluginLoader, MvvmCross.Plugins.BLE.iOS.Plugin>
{
}
}
Android Bootstrapper
继承自MvxPluginBootstrapAction
。
namespace $rootnamespace$.Bootstrap
{
public class BlePluginBootstrap
: MvxPluginBootstrapAction<MvvmCross.Plugins.BLE.PluginLoader>
{
}
}
<强>插件加载强>
public class PluginLoader
: IMvxPluginLoader
{
public static readonly PluginLoader Instance = new PluginLoader();
public void EnsureLoaded()
{
var manager = Mvx.Resolve<IMvxPluginManager>();
manager.EnsurePlatformAdaptionLoaded<PluginLoader>();
}
}
插件
每个插件都有其特定于平台的Plugin
类,用于注册接口的实现。
namespace MvvmCross.Plugins.BLE.Droid
{
public class Plugin
: IMvxPlugin
{
public void Load()
{
Mvx.LazyConstructAndRegisterSingleton<IAdapter>(() => new Adapter());
}
}
}
答案 1 :(得分:3)
确实如此。 MvxLoaderPluginRegistry
在MvvmCross 4.1.4中没有这样的方法。
建议使用Bootstrap类加载插件。您可以查看MvvmCross example,了解如何加载常规和非常规方法。
注意:您现在可以对所有平台使用MvxLoaderPluginBootstrapAction
(4.1.4之前此引导程序仅适用于iOS / Mac平台)
但是,如果您仍想使用Registry
加载插件,则必须使用新方法指定特定于平台的类:
public override AddPluginsLoaders (MvxLoaderPluginRegistry registry)
{
// Register plugin using types
registry.Register<MyPlugin.PluginLoader, MyPlugin.iOS.Plugin>();
// Registeer plugin using factory method
registry.Register<MyPlugin.PluginLoader>(() => new MyPlugin.iOS.Plugin());
}
// Don't forget to load these plugins
public override void LoadPlugins(IMvxPluginManager pluginManager)
{
pluginManager.EnsurePluginLoaded<MyPlugin.PluginLoader>();
base.LoadPlugins(pluginManager);
}