2

を使用すると、このエラーが発生しますAddConventionalPlugin

プラグインインスタンスのタイプを渡す必要があります-のように

typeof(Cirrious.MvvmCross.Plugins.Visibility.WindowsPhone.Plugin)

私のプラグインは次のようなものだからです:

Cirrious.MvvmCross.Plugins.Visibility.Wp7.Plugin

Wp7 と Wp8 は異なる SDK を使用するため、2 つのプロジェクトに分割されると思います。

この問題を回避する方法はありますか?

よろしくお願いします。

4

1 に答える 1

2

「規則」の部分は、単に命名規則です。

つまり、次の IMvxPlugin を提供するものを探しているだけです。

 Cirrious.MvvmCross.Plugins.Visibility

ルール「add "WindowsPhone"」を使用して次を取得します。

 Cirrious.MvvmCross.Plugins.Visibility.WindowsPhone.Plugin

WP8 のルールが変更された場合は、 https://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Cirrious.MvvmCross.WindowsPhone/Platform/MvxBaseWindowsPhoneSetup.csの規則を変更するだけです。


WP8 はまだ少し不明確ですが...次のようなコードを使用して、Setup.cs のプロジェクトで自分でこれを行うことができます。

    protected override IMvxPluginManager CreatePluginManager()
    {
        var toReturn = new MvxLoaderBasedPluginManager();
        var registry = new MvxLoaderPluginRegistry(".WP7",toReturn.Loaders);
        AddPluginsLoaders(registry);
        return toReturn;
    }

または、バージョンを組み合わせて一致させることもできます-つまり、次のようなことができます:

    protected override IMvxPluginManager CreatePluginManager()
    {
        var toReturn = new MvxLoaderBasedPluginManager();

        var sharedRegistry = new MvxLoaderPluginRegistry(".WindowsPhone",toReturn.Loaders);
        sharedRegistry.AddConventionBasedPlugin<SharedP1>();
        sharedRegistry.AddConventionBasedPlugin<SharedP1>();
        sharedRegistry.AddConventionBasedPlugin<SharedP3>();

        var wp7Registry = new MvxLoaderPluginRegistry(".WP7",toReturn.Loaders);
        wp7Registry.AddConventionBasedPlugin<WP7P1>();
        wp7Registry.AddConventionBasedPlugin<WP7P2>();

        return toReturn;
    }

最後に、規約の使用を強制するものはまったくありません。独自のプラグイン読み込みメソッドをいつでも提供できます。Func<IMvxPlugin>たとえば、

    protected override IMvxPluginManager CreatePluginManager()
    {
        var toReturn = new MvxLoaderBasedPluginManager();

        toReturn.Loaders.Add('Cirrious.MvvmCross.Plugins.Visibility.WindowsPhone.Plugin', () =>
               {
                  // do whatever code you want to do...
                  return thePlugin; 
               });

        return toReturn;
    }

これらのテクニックを組み合わせることができます


または、必要に応じて IMvxPluginManager のまったく新しい実装を提供できます。インターフェイスは次のとおりです。

public interface IMvxPluginManager
{
    bool IsPluginLoaded<T>() where T : IMvxPluginLoader;
    void EnsureLoaded<T>() where T : IMvxPluginLoader;
}

したがって、たとえば、次のような非常に単純なマネージャーを提供できます

public class SimplePluginManager : IMvxPluginManager
{
    public SimplePluginManager()
    {
        // load the plugins your app needs here!
        Cirrious.MvvmCross.Plugins.Visibility.Wp7.Plugin.Load();
        Cirrious.MvvmCross.Plugins.Color.WindowsPhone.Plugin.Load();
    }

    public bool IsPluginLoaded<T>() where T : IMvxPluginLoader
    {
        return true;
    }

    public void EnsureLoaded<T>() where T : IMvxPluginLoader
    {
    }
}
于 2012-10-11T15:53:24.283 に答える