どうも。どっことです。今回はKoinの使い方について解説します。
Koinを使ったDIの実装
Koinってなんだよ、というあなたはこちらを見てくださると大変嬉しいです。ちなみに、Daggerというライブラリを使ってDIを実現するパターンもありましたが、実装難易度の観点から今回はKoinを使う方針としました。
それでは実装方法について解説します。
ライブラリの組み込み
まずはライブラリを組み込む必要があるのでapp/build.gradle.kt
のdependencies
に以下を記述します。
dependencies {
// 他にもあるけど説明のためこれだけ。
implementation("io.insert-koin:koin-android:3.4.2")
}
Applicationクラスの実装
続いて、Application
クラスに必要な処理を追加していきます。Application
ってどうすんだっけ、というあなたはこちらを見てくださると大変嬉しいです。
module
インスタンスを作ってstartKoin
を実行します。module
インスタンスには
DIするインターフェースとそれの実装クラスを登録します。以下はSampleRepositoryImpl(dao: Dao)
をDIするサンプルです。
private val appModule = module {
single<SampleRepository> { SampleRepositoryImpl(get()) }
}
protected open val dao = module {
single {
Room.databaseBuilder(
applicationContext,
Database::class.java,
DATABASE_NAME
).build().dao()
}
}
override fun onCreate() {
super.onCreate()
startKoin {
androidContext(this@SampleApplication)
modules(appModule, dao)
}
}
メモ:single
で登録しておくと、シングルトンパターンでオブジェクトを管理してくれる。
各機能にアクセスする
あとはDIしたい箇所で、by inject()
を使ってインジェクトすると、簡単にアクセスすることができます。
private val repository : SampleRepository by inject()
まとめ
今回はDIをシンプルにアプリに導入できるライブラリであるKoinの使い方を解説しました。昨今のプログラムのレガシー化やCI/CDに向けたモジュールの疎結合を意識する上でDIは必要不可欠な機能の一つです。DIを実現するものは今回のKoin以外にもさまざまなものがありますので、比較・検討した上で導入しましょう。