Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon MVVMCrossは、オブジェクトの構築中の反射をどのように処理しますか


MVVMCrossは、オブジェクトの構築中の反射をどのように処理しますか


MVVMCrossは、特に「MVX.IOCProvider」Singletonインスタンスによって管理される制御(IOC)コンテナの反転を通じて、オブジェクト構造中に反射を広範囲に利用します。 MVVMCrossがオブジェクトの構築中に反射を処理する方法の詳細な概要を次に示します。

###コンストラクターインジェクション

MVVMCrossはコンストラクターインジェクションをサポートします。これにより、反射を使用してオブジェクト構造中にパラメーターを自動的に解決できます。オブジェクトを作成するとき、MVVMCrossは次の手順を実行します。

1.コンストラクターを見つけるための反射:MVVMCrossは、反射を使用して、インスタンス化されているクラスのコンストラクターを識別します。
2。パラメーター解像度:コンストラクターが必要とするパラメーターを調べ、必要なインターフェイスまたはタイプを識別します。
3。登録済み実装の解決:各パラメーターについて、MVVMCrossは `MVX.IOCPROVIDER.RESOLVE()`を使用して、インターフェイスまたはタイプの登録された実装を取得します。
4。コンストラクターを呼び出す:すべてのパラメーターが解決されると、MVVMCrossは反射を使用して、解決されたパラメーターを使用してコンストラクターを呼び出します。

このプロセスは再帰的です。つまり、解決されたオブジェクトのいずれかが他のオブジェクトも必要な場合、MVVMCrossはそれらも解決します[1] [4]。

Bulk登録により、大会による登録

MVVMCrossは、リフレクションを使用してクラスのバルク登録もサポートしています。これは通常、「MVXApplication」から継承する「アプリ」クラスで行われます。このフレームワークは、反射を使用して、「サービス」で終わるコアアセンブリ内のすべてのクラスを見つけ、怠zyなシングルトンとしてそれらを登録します。これは、次の手順で達成されます。

1.「サービス」で終わるクラスを見つける:リフレクションは、コアアセンブリ内で「サービス」で終わる名前のすべてのクラスを見つけるために使用されます。
2。インターフェイスを特定する:見つかったクラスごとに、MVVMCrossは、実装するインターフェイスを識別します。
3.怠zyなシングルトンとして登録:これらのクラスは、それぞれのインターフェイスに対して怠zyなシングルトンとして登録されます。これは、最初に要求されるまでインスタンス化されないことを意味します[2] [4] [7]。

ViewModelsと依存関係の注入

MVVMCrossは、ViewModelsに同じコンストラクターインジェクションメカニズムを使用します。 ViewModelを作成するとき、MVVMCrossはIOCコンテナを使用してコンストラクターで指定された依存関係を解決します。これにより、さまざまなプラットフォームでサービスを簡単にカスタマイズできるようになり、模擬実装の使用を可能にすることにより、単体テストを容易にします[1] [4]。

###カスタマイズとAppStart

「App」クラスは、IOCコンテナにカスタムオブジェクトを登録し、アプリケーションのViewModelsを起動する責任があります。必要に応じて、カスタム「AppStart」クラスを使用して、最初に表示する[2] [7]を表示するViewModelを決定することにより、スタートアッププロセスをカスタマイズできます。

要約すると、MVVMCrossは反射を活用して、オブジェクトの構築中に依存関係を解決するプロセスを自動化し、複雑なオブジェクトグラフの管理を容易にし、プラットフォーム固有のコードを最小限に抑えてクロスプラットフォーム開発をサポートします。

引用:
[1] https://www.mvvmcross.com/documentation/fundamentals/dependency-injection
[2] https://yanxiaodi.gitbook.io/xamarin-mvvvmcross handbook/using-mvvvmcross-create-your-first-xamarin-app/creating-the-core-project/adding-an-appクラス
[3] http://wojosoftware.com/software/mvvmcross/
[4] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[5] https://www.codeproject.com/articles/863695/introduction-to-mvvmcross-platform
[6] https://github.com/media-tools/sqlite-net-extensions
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-Overview
[8] https://www.mvvmcross.com/documentation/fundmentals/viewmodel-lifecycle
[9] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-bhuild-mvvm-apps-with-xamarin-and-mvvmcross
[10] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup