4

私は MVVMCross を試してみて、今後のより大きなプロジェクトで役立つかどうかを確認しています。それは素晴らしいことです。ナビゲーション、viewModel の場所、および一般的なクロスプラットフォーム アプローチが気に入っています。これはまさに私が必要としているものです。ただし、プラットフォームに応じて依存性注入の一部を分割することに少し行き詰まっています。

これで、起動時にサービス参照を初期化する、共有ポータブル ライブラリを使用した基本的なアプリケーションができました。

    public TwitterSearchApp()
    {
        InitaliseServices();
    }

    private void InitaliseServices()
    {
        this.RegisterServiceInstance<ITwitterSearchProvider>(new TwitterSearchProvider());
    }

罰金。これにより、すべてのプラットフォームで使用されるサービスの実装が定義されます。しかし、さまざまなプラットフォームでさまざまな実装が必要になる状況についてはどうでしょうか。たとえば、コア要件は同じですが、スマートフォンとタブレットでは異なる方法で処理する必要があるストレージ/キャッシュなどです。

セットアップのどこかに入るかもしれないと思いました:

public class Setup : MvxBaseWinRTSetup
    {
        public Setup(Frame rootFrame): base(rootFrame)
        {
        }

        protected override MvxApplication CreateApp()
        {
            var app = new TwitterSearchApp();//set platorm specific IoC here maybe?
            return app;
        }

        protected override void AddPluginsLoaders(Cirrious.MvvmCross.Platform.MvxLoaderPluginRegistry loaders)
        { // or perhaps here?
            loaders.AddConventionalPlugin<Cirrious.MvvmCross.Plugins.Visibility.WinRT.Plugin>();
            base.AddPluginsLoaders(loaders);
        }
    }

確信はないけど。ViewModel ロケーターの置き換えに関する参照を見てきましたが、他の IoC サービスを置き換える同様の方法はありますか?

ありがとう、フレームワーク全体で素晴らしい仕事をしました。私はそれがどのように機能するかが本当に好きです(このビットは別として、私はまだ正しく理解していません)

トビー

4

1 に答える 1

9

次の 3 つの基本的なオプションがあります。

1 . プラットフォーム固有のサービスを UI プロジェクトに追加し、セットアップ中にオーバーライドに登録します。どのオーバーライドを使用するかは、サービスがいつ必要になるかによって異なりますが、ほとんどの場合InitializeLastChance、初期化の最後に呼び出されるオーバーライドを使用できます。

protected override void InitializeLastChance()
{
    this.RegisterServiceInstance<IMyService>(new SingletonMyService());
    this.RegisterServiceType<IMyService2, PerCallService2>();
    base.InitialiseLastChance();
}

サービスにとって「最後のチャンス」が遅すぎる場合 (コアアプリの起動時にサービスが必要な場合) は、その後の初期化ステップをオーバーライドできInitializeIoCますInitializeFirstChance。初期化手順のリストと順序については、MvxBaseSetup.csInitializePrimaryのとを参照してください。InitializeSecondary

2 . プラットフォーム固有の登録を、UI コードの他のビットに追加します。たとえば、特定のビューのコンストラクターに追加します (このオプションはあまり使用されません... )

3 . プラグインを使用 - すべてのプラグインは IoC のラッパーです。プラグインには、開発のオーバーヘッドが増えるという欠点がありますが (別のプロジェクトとプラグインの定型ファイルを追加する必要があります)、アプリ間で再利用でき、テスト アプリとそれらのテスト ハーネスを簡単に作成できるという利点があります。プラグインの詳細については、Making mono cross platform support for Task/Intentおよびhttp://slodge.blogspot.co.uk/2012/10/build-new-plugin-for-mvvmcrosss.htmlを参照してください。


私の一般的なアドバイス - 最初のオプションから始めて、後のプロジェクトでコードを再利用したい場合は、プラグインに移行してください...

于 2013-01-15T13:01:09.997 に答える