【Compose Multiplatform】KoinでAndroidのContextを扱うクロスプラットフォームアプリの実装

はじめに

Compose Multiplatformプロジェクトを開発する際
プラットフォーム固有の問題に対処する必要があります
その中で直面する問題の一つは
AndroidプラットフォームではContextが必要ですが、iOSでは必要ないということです
この記事では、Koinを使用した依存性注入の際に
この問題を正常に解決する方法を紹介します

実装方法
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戦略を調整できます

You might also enjoy