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の修飾子でもいけるんだね