短い答え:
私はあなたがする必要があると推測しています:
- 名前空間とアセンブリ名がすべて同じ規則であることを確認してください
- UI.Droidプロジェクト内でコアプラグインアセンブリと正しいプラグイン実装の両方を参照していることを確認してください
より長い答え(私がすでに持っていたいくつかのメモに基づいて-すぐに公開されます):
まったく新しいプラグインを作成する場合は、次のようにします。
1.中央共有プラグインを作成します
これはポータブルクラスライブラリになります-たとえばAlphaPage.MvvmCross.Plugins.Mega
その中央の共有PCL内に、利用可能なポータブルコードを配置します。多くの場合、これは少数のサービスインターフェイス定義にすぎない可能性があります。
public interface IAlphaService { ... }
と
public interface IPageService { ... }
次に、そのプラグインのPluginManagerを追加します。これにより、次の定型文が追加されます。
public class PluginLoader
: IMvxPluginLoader
, IMvxServiceConsumer<IMvxPluginManager>
{
public static readonly PluginLoader Instance = new PluginLoader();
#region Implementation of IMvxPluginLoader
public void EnsureLoaded()
{
var manager = this.GetService<IMvxPluginManager>();
manager.EnsureLoaded<PluginLoader>();
}
#endregion
}
2.特定のプラグイン実装を作成します
次に、プラットフォームごとに、プラグインを実装します。たとえばAlphaPage.MvvmCross.Plugins.Mega.WindowsPhone
、 AlphaPage.MvvmCross.Plugins.Mega.Droid
これらのそれぞれの中で、サービスを提供するネイティブクラスを実装します。
public class MyAlphaService : IAlphaService { ... }
と
public class MyPageService : IPageService { ... }
最後に、各プラグインは定型プラグインの実装を提供します。
public class Plugin
: IMvxPlugin
, IMvxServiceProducer
{
#region Implementation of IMvxPlugin
public void Load()
{
// alpha registered as a singleton
this.RegisterServiceInstance<IAlphaService>(new MyAlphaService());
// page registered as a type
this.RegisterServiceType<IPageService, MyPageService>();
}
#endregion
}
3.プラグインのインスタンス化
各UIクライアントはプラグインを初期化する必要があります。
これは、エンドUIクライアントがライブラリ参照を以下に追加することによって行われます。
3.1 WinRT、WindowsPhone、MonoTouch
次に、WinRT、WindowsPhone、MonoTouchクライアントの場合、setup.csでローダーアクセサーを提供する必要があります。
protected override void AddPluginsLoaders(Cirrious.MvvmCross.Platform.MvxLoaderPluginRegistry loaders)
{
loaders.AddConventionalPlugin<AlphaPage.MvvmCross.Plugins.Mega.WindowsPhone.Plugin>();
base.AddPluginsLoaders(loaders);
}
ここでは規則が使用されていることに注意してください。したがって、AlphaPage.MvvmCross.Plugins.Mega.WindowsPhone.PluginがAlphaPage.MvvmCross.Plugins.Mega.PluginLoader用のWindowsPhoneプラグインを実装することが重要です。
3.2モノドロイド
MonoDroidクライアントの場合、MonoDroidには他のプラットフォームよりもAssembly.Loadの制限が少ないため、このセットアップ手順を追加する必要はありません。aoはファイルからプラグインをロードできます。ただし、これが機能するためには、アセンブリ名が一致していることが重要です。PluginLoaderが一致している場合、規則はAlphaPage.MvvmCross.Plugins.Mega.PluginLoader
プラグインをからロードしようとします。AlphaPage.MvvmCross.Plugins.Mega.Droid.dll
4.プラグインサービスの使用
このセットアップの後、アプリケーションは最終的に次の方法でプラグインにアクセスできるようになります。
- 参照の追加共有コアポータブルライブラリ
- いつか電話する
AlphaPage.MvvmCross.Plugins.Mega.PluginLoader.Instance.EnsureLoaded()
this.GetService<IAlphaService>()
次に、またはを使用して個々のサービスにアクセスしますthis.GetService<IPageService>()
5.純粋なポータブルプラグイン
一部のプラグインは「純粋なポータブル」にすることができます
この場合、プラットフォームごとに特殊化する必要はなく、ステップ3も必要ありません。
この例については、Jsonの実装を参照してください-https ://github.com/slodge/MvvmCross/tree/vnext/Cirrious/Plugins/Json