Koinは使ったことあるが、Androidプロジェクトに初期導入したことがなかったので、やってみる。
KOINとは
公式より日本語化して引用
Kotlin開発者向けの実用的な軽量の依存関係注入フレームワーク。
純粋なKotlinで記述され、機能解決のみを使用します。プロキシなし、コード生成なし、リフレクションなし。
導入
まずはbuild.gradleに追加
build.gradle
buildscript {
ext.koin_version = '2.1.5'
...
dependencies {
classpath "org.koin:koin-gradle-plugin:$koin_version"
app/build.gradle
// Koin for Kotlin
implementation "org.koin:koin-core:$koin_version"
// Koin for Android
implementation "org.koin:koin-android:$koin_version"
// Koin AndroidX Scope features
implementation "org.koin:koin-androidx-scope:$koin_version"
// Koin AndroidX ViewModel features
implementation "org.koin:koin-androidx-viewmodel:$koin_version"
// Koin AndroidX Experimental features
implementation "org.koin:koin-androidx-ext:$koin_version"
準備
startKoin
でKoinを準備
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
startKoin {
androidContext(this@MainApplication)
modules(appModule)
}
}
}
moduleを用意する
val appModule = module {
// リポジトリコンポーネントを宣言
single<ISampleRepository> { SampleRepository() }
// MainViewModelを宣言 (SampleRepositoryが渡される)
viewModel { MainViewModel(get<ISampleRepository>()) }
}
実装
Fragment
class MainFragment : Fragment() {
// koinのviewModel()を使う
private val viewModel: MainViewModel by viewModel()
...
ViewModel
class MainViewModel(val repository: ISampleRepository) : ViewModel() {
// repository変数に SampleRepository がKoinで渡される
...
感想
導入も簡単、実装もすごくシンプル!
難しいことをしなければDaggerよりも便利だなー
使用したコード