KC Blog

【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戦略を調整できます