3
1

More than 3 years have passed since last update.

AndroidでKoinを使ってDI

Posted at

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よりも便利だなー

使用したコード

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1