【Compose Multiplatform】KoinでAndroidのContextを扱うクロスプラットフォームアプリの実装
はじめに
Compose Multiplatformプロジェクトを開発する際
プラットフォーム固有の問題に対処する必要があります
その中で直面する問題の一つは
AndroidプラットフォームではContextが必要ですが、iOSでは必要ないということです
この記事では、Koinを使用した依存性注入の際に
この問題を正常に解決する方法を紹介します
実装方法
CMPのexpectとactualキーワードを使用して、異なるプラットフォームに異なる実装を提供する必要があります
最初にcommonMainでexpectを作成します
この例では、SettingDataStoreがcontextを必要とし
LearningViewModelがSettingDataStoreを必要とするため
expect platformModule変数を作成しました
ここでdataStoreがcontextを取得する必要があると想定しています:
そのため直接実装できます
Android
Androidのエントリポイントでcontextを取得し
startKoinのモジュールリストに挿入します
iOS:
使用方法
commonMainでkoinViewModelを使用して注入されたViewModel:
またはモジュールでget()
を使用して必要なインスタンスを生成することもできます
まとめ
- expectとactualキーワードを使用することでプラットフォームの違いを処理できます
- KoinはCompose Multiplatformで依存性注入のサポートを提供します
- Contextを適切に処理することで、クロスプラットフォームコードがより明確で保守しやすくなります
- この方法は他のプラットフォーム固有の依存性注入シナリオにも適用できます
- 実際の開発では、自分のニーズに応じて柔軟にDI戦略を調整できます