以下の内容はhttps://uga-box.hatenablog.com/entry/2024/09/12/000000より取得しました。


【Kotlin】Koinとは

KoinというKotlin向けの依存性注入(Dependency Injection, DI)フレームワークを知ったので調べた

insert-koin.io

JavaのSpringと同様にアノテーションでDIを行っていく

主な特徴

  • 軽量でシンプル:余計な設定や複雑なアノテーションを必要とせず、簡単に導入・利用可能
  • Kotlin DSLを使用:Kotlinの関数やラムダ式を活用して依存関係を宣言するため、非常に可読性が高い
  • Android対応Androidアプリケーションでも使いやすく、ViewModelなどと統合して利用可能

基本的な使い方

1. 依存関係の定義

まず、Koinのmoduleを使用して依存関係を定義する

たとえば、MyRepositoryMyServiceの依存関係を定義する場合

@Module
class MyRepository

@Module
class MyService
   val appModule = module {
       single { MyRepository() }
       single { MyService(get()) }  // get() で登録するオブジェクトに依存するオブジェクトを取得
   }
  • singleはシングルトンインスタンスを提供することを示す
  • get()はKoinにネストされた依存関係を解決させるために使う

2. Koinの初期化

アプリケーションのonCreateやエントリーポイントでKoinを開始する

   class MyApplication : Application() {
       override fun onCreate() {
           super.onCreate()
           startKoin {
               modules(appModule)  // 定義したモジュールを渡す
           }
       }
   }

3. 依存関係の注入

Koinを使用して、依存関係を注入する

inject()関数を使うと、Koinが自動的に必要なインスタンスを提供する

   class MyViewModel : ViewModel() {
       private val myService: MyService by inject()  // 自動的に注入される
   }

Koinのスコープ

Koinでは、異なるスコープを使用して、ライフサイクルに基づいてオブジェクトを生成・管理できる

たとえば、factoryを使用すると、毎回異なるインスタンスを生成できる

val appModule = module {
    factory { MyRepository() }  // 新しいインスタンスを毎回生成
}

テストでの使用

Koinはテストのサポートも充実していて、モックやスタブを簡単に設定できる

テスト環境で異なるモジュールを設定し、依存関係を注入できる

val testModule = module {
    single { MockRepository() as MyRepository }
}

@Test
fun myTest() {
    startKoin { modules(testModule) }
    // テストロジック
}



以上の内容はhttps://uga-box.hatenablog.com/entry/2024/09/12/000000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14