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