MVVMCrossは、アプリケーションロジックをコアプロジェクトとプラットフォーム固有のプロジェクトの2つの主要部分に分離することにより、プラットフォーム固有のコードを効率的に処理するように設計されています。コアプロジェクト、通常は.NET標準ライブラリには、プラットフォーム固有のサービス用のビジネスロジック、ビューモデル、モデル、およびインターフェイスが含まれています。これにより、Android、iOS、Windowsなどのさまざまなプラットフォームでコード共有を最大限に活用できます。
###プラットフォーム固有のプロジェクト
各プラットフォーム固有のプロジェクト(Xamarin.Android、Xamarin.iosなど)には、プラットフォーム固有のサービスのユーザーインターフェイスと実装が含まれています。これらのプロジェクトは、MVVMCrossフレームワークの初期化と、セットアップクラスを使用してプラットフォーム固有のサービスを登録する責任があります。セットアップクラスは、MVVMCrossのブートストラッパーとして機能し、開発者が各プラットフォームのフレームワークの動作をカスタマイズできるようにします。
###コントロール(IOC)および依存関係注射の反転
MVVMCrossは、コントロール(IOC)コンテナの反転を使用して、アプリケーション全体の依存関係を管理します。これにより、プラットフォーム固有のサービスを登録およびコアプロジェクトのロジックに注入できます。たとえば、アプリケーションがGPSロケーションサービスにアクセスする必要がある場合、GPSサービスをプラットフォーム固有のセットアップクラスに登録してから、Coreプロジェクトのビューモデルまたは他の部分に注入できます。
###プラットフォームの動作をカスタマイズします
開発者は、セットアップクラスでメソッドをオーバーライドすることにより、プラットフォーム固有の動作をカスタマイズできます。たとえば、Androidでは、Android固有のサービスを登録するか、Android固有のライフサイクルイベントを処理するために「MVXandroidSetup」のメソッドをオーバーライドする場合があります。同様に、iOSでは、「mvxiossetup」を使用して、iOS固有の初期化とサービス登録を処理します。
###プレゼンターを表示します
MVVMCrossは、各プラットフォームでビューがどのように表示されるかを決定する責任があるビュープレゼンターも提供します。これにより、プラットフォームの規則に応じて、見解をモダンに見えるように、またはナビゲーションスタックの一部として表示するなど、UIプレゼンテーションロジックのカスタマイズが可能になります。
###プラグインと拡張機能
MVVMCrossは、開発者がローカリゼーション、センサーなどなどの一般的な機能のためにサードパーティプラグインを簡単に統合できるようにするプラグインフレームワークを提供します。これらのプラグインは、複数のプラットフォームで使用でき、プラットフォーム固有のコードの必要性をさらに削減できます。
要約すると、MVVMCrossは、共有ロジックをプラットフォーム固有の実装と分離するための構造化されたアプローチを提供することにより、プラットフォーム固有のコードを処理します。 IOCと依存関係のインジェクションを使用してプラットフォームサービスを管理し、セットアップクラスを通じてカスタマイズを可能にし、プラットフォーム全体で機能を拡張するためのプラグインをサポートします。
引用:[1] https://github.com/mvvmcross/mvvmcross
[2] https://dev.to/christian1006/creating-cross-platform-xamarin-applications-using-the-mvvmcross-framework-2920
[3] https://canbilgin.wordpress.com/tag/mvvmcross/
[4] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-Overview
[5] https://stackoverflow.com/questions/14337063/platform specific-ioc-in-mvvmcross
[6] https://stackoverflow.com/questions/61641185/Platform-specific-service-causes-an-exception-mvvmcross-xamarin-ios
[7] https://leaware.com/creating-cross-platform-xamarin-applications-using-the-mvvmcross-framework/
[8] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-packages
[9] https://www.codeproject.com/articles/863695/introduction-to-mvvmcross-platform
[10] https://www.mvvmcross.com/documentation/getting-started/getting-started
[11] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup