MVVMCrossを使用したMicrosoft.extensions.dependencyInjectionを使用すると、いくつかの課題と既知の問題が発生する可能性があります。
1. MVVMCrossのスタートアッププロセスとの非互換性:MVVMCrossには、セットアッププロセスの途中でコンポーネントを解決し、より多くのコンポーネントを登録し続ける機能が必要です。ただし、microsoft.extensions.dependencyInjection(Ms.DI)では、サービスコレクションで `.build()`を呼び出す前に、すべてのコンポーネントを登録する必要があります。この根本的な違いにより、1つの容器から別のコンテナにサービスを手動で翻訳するなど、追加の回避策なしに2つのシステムが互換性がありません[1]。
2。2段階の起動プロセス:MS.DIをMVVMCrossと活用するために、開発者はMs.DIサービスコレクションを構築し、そのサービスをMVVMCross「IMVXIOCPROVIDER」インスタンスに変換することがよくあります。このアプローチでは、2段階のスタートアッププロセスを導入します。これは面倒であり、追加の複雑さと潜在的な問題につながる可能性があります[1]。
3。依存関係噴射の制限:MVVMCrossのIOCコンテナは、インスタンス化されたタイプではなく、インターフェイスレベルでシングルトンの側面を扱います。これは、クラスが複数のインターフェイスを実装する場合、MVVMCrossは明示的に管理されない限り、各インターフェイスの個別のインスタンスを作成する可能性があることを意味します[4]。これはMs.DIに直接関係していませんが、異なる依存関係噴射システムを統合する際の慎重な管理の必要性を強調しています。
4.アップグレードと互換性の問題:MVVMCrossバージョンのアップグレードは、特にベースビューモデルを使用する場合、依存関係注入の問題を導入する場合があります。たとえば、バージョン間のコンストラクターの選択ロジックの変更は、依存関係がどのように注入されるかに影響する可能性があります[2]。
これらの課題を克服するために、開発者はしばしば、コアIOCコンテナを交換せずにMVVMCrossの機能を強化することを選択します。これにより、MVVMCrossと一緒にMs.Diのような追加の依存関係インジェクションフレームワークを使用することができ、IOCプロバイダー[1] [5]の選択に柔軟性を提供します。ただし、競合を回避し、シームレスな統合を確保するために、慎重なセットアップと管理が必要です。
要約すると、MVVMCrossを使用したMicrosoft.extensions.DependencyInjectionを使用することは可能ですが、既知の問題を回避するために、スタートアッププロセス、潜在的な非互換性、依存関係の慎重な管理を慎重に検討する必要があります。
引用:[1] https://github.com/mvvmcross/mvvmcross/issues/4436
[2] https://github.com/mvvmcross/mvvmcross/issues/4183
[3] https://docs.particular.net/nservicebus/dependency-injection/extensions-dependencyinjection
[4] https://stackoverflow.com/questions/23700121/possible-bug-with dependency-injection-on-mvvmcross
[5] https://github.com/mvvmcross/mvvmcross/issues/3804
[6] https://www.mvvmcross.com/documentation/fundmentals/dataバインディング
[7] https://msicc.net/using-microsofts-extensions-dependencyinjection-package-in-xamarin-forms-mvvm-applications-part-2/
[8] https://www.mvvmcross.com/documentation/fundmentals/dependency-inesticle