2016-04-22 5 views
1

MvxLoaderPluginRegistry.AddConventionalPlugin fehlt nach dem Update auf MvvmCross 4.1.4. Jetzt kann ich einen Satz oder Register Methoden sehen, die andere Signatur haben:MvxLoaderPluginRegistry.AddConventionalPlugin fehlt nach dem Update auf MvvmCross 4.1.4

https://github.com/MvvmCross/MvvmCross/blob/a45cb515844f935b8b8ca04cf905342665a53fb9/MvvmCross/Platform/Platform/Plugins/MvxLoaderPluginRegistry.cs

Wie Plugins nach dem Update laden?

+1

Beachten Sie, dass die Plug-in-Registrierung 4.1.4 Refactoring ist: https://github.com/MvvmCross/MvvmCross/pull/1290 – Martijn00

Antwort

3

Die Plugins werden über Bootstrappers geladen. Diese Bootstrapper werden automatisch mit den MvvmCross-Plugins im Ordner Bootstrap installiert. $rootnamespace wird beim Installieren des Plugins über NuGet durch den Root-Namespace des Zielprojekts ersetzt.

iOS Bootstrapper

Erben von MvxLoaderPluginBootstrapAction.

namespace $rootnamespace$.Bootstrap 
{ 
    public class BlePluginBootstrap 
     : MvxLoaderPluginBootstrapAction<MvvmCross.Plugins.BLE.PluginLoader, MvvmCross.Plugins.BLE.iOS.Plugin> 
    { 
    } 
} 

Android Bootstrapper

Erbt von MvxPluginBootstrapAction.

namespace $rootnamespace$.Bootstrap 
{ 
    public class BlePluginBootstrap 
     : MvxPluginBootstrapAction<MvvmCross.Plugins.BLE.PluginLoader> 
    { 
    } 
} 

bootstrappers of installed plugins

Plugin

public class PluginLoader 
    : IMvxPluginLoader 
{ 
    public static readonly PluginLoader Instance = new PluginLoader(); 

    public void EnsureLoaded() 
    { 
     var manager = Mvx.Resolve<IMvxPluginManager>(); 
     manager.EnsurePlatformAdaptionLoaded<PluginLoader>(); 
    } 
} 

Plugin

Jede Plugin seine plattformspezifische Plugin Klasse hat, die die Implementierung der Schnittstellen registriert.

namespace MvvmCross.Plugins.BLE.Droid 
{ 
    public class Plugin 
    : IMvxPlugin 
    { 
     public void Load() 
     { 
      Mvx.LazyConstructAndRegisterSingleton<IAdapter>(() => new Adapter()); 
     } 
    } 
} 
+0

danke, Bootstraps gab es aber Code wasn‘ t arbeiten. Das war hilfreich: https://github.com/MvvmCross/MvvmCross/wiki/MvvmCross-plugins –

3

Es ist wahr. MvxLoaderPluginRegistry hat solche Methode in MvvmCross 4.1.4 nicht mehr.

Es wird empfohlen, die Bootstrap-Klasse zum Laden von Plugins zu verwenden. Sie können überprüfen, MvvmCross example, wie Sie sowohl konventionelle als auch unkonventionelle Ansätze laden.

Hinweis: Sie können MvxLoaderPluginBootstrapAction verwenden für alle Plattformen jetzt (vor 4.1.4 funktionierte das Bootstrap nur auf iOS/Mac-Plattformen)

Obwohl, wenn Sie wollen immer noch Registry verwenden zu laden Plugins Sie Plattform angeben spezifische Klasse mit neuen Methoden:

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); 
} 
Verwandte Themen