Skip to main content

DIフレームワークKoinをAndroidで使ってみた


Dagger2でDIしたことはあるけど
最近Koinが人気と聞き試しにやってみた


・ドキュメント
もうこのまんまやってみた
https://start.insert-koin.io/#/quickstart/android

 

・gradle

ext.koin_version= "2.2.1"

android用のパッケージも入れないと動かないので注意

implementation "org.koin:koin-core:$koin_version"
implementation "org.koin:koin-android-scope:$koin_version"

 

・Kotlin
Module.kt
トップレベルに定義しちゃったけど、これどうすりゃいいんかね

val appModule = module {
    // single instance of HelloRepository
    single<HelloRepository> { HelloRepositoryImpl() }

    // Simple Presenter Factory
    factory { MySimplePresenter(get()) }
}

MyApplication.kt

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        startKoin {
            androidLogger()
            androidContext(this@MyApplication)
            modules(appModule)
        }
    }
}

HelloRepository.kt

interface HelloRepository {
    fun giveHello(): String
}

HelloRepositoryImpl.kt

class HelloRepositoryImpl : HelloRepository {
    override fun giveHello() = "Hello Koin"
}

MySimplePresenter.kt

class MySimplePresenter(private val repo: HelloRepository) {
    fun sayHello() = "${repo.giveHello()} from $this"
}

MainActivity.kt

class MainActivity : AppCompatActivity() {
    private val firstPresenter: MySimplePresenter by inject()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Log.e("masterka", firstPresenter.sayHello())
    }
}

 

これでKoinでinjectできましたとさ
privateの修飾子でもいけるんだね

関連記事:

Pocket