Dagger2でDIしたことはあるけど
最近Koinが人気と聞き試しにやってみた
・ドキュメント
もうこのまんまやってみた
https://start.insert-koin.io/#/quickstart/android
・gradle
1 | ext.koin_version= "2.2.1" |
android用のパッケージも入れないと動かないので注意
1 2 | implementation "org.koin:koin-core:$koin_version" implementation "org.koin:koin-android-scope:$koin_version" |
・Kotlin
Module.kt
トップレベルに定義しちゃったけど、これどうすりゃいいんかね
1 2 3 4 5 6 7 | val appModule = module { // single instance of HelloRepository single<HelloRepository> { HelloRepositoryImpl() } // Simple Presenter Factory factory { MySimplePresenter(get()) } } |
MyApplication.kt
1 2 3 4 5 6 7 8 9 10 11 | class MyApplication : Application() { override fun onCreate() { super.onCreate() startKoin { androidLogger() androidContext(this@MyApplication) modules(appModule) } } } |
HelloRepository.kt
1 2 3 | interface HelloRepository { fun giveHello(): String } |
HelloRepositoryImpl.kt
1 2 3 | class HelloRepositoryImpl : HelloRepository { override fun giveHello() = "Hello Koin" } |
MySimplePresenter.kt
1 2 3 | class MySimplePresenter( private val repo: HelloRepository) { fun sayHello() = "${repo.giveHello()} from $this" } |
MainActivity.kt
1 2 3 4 5 6 7 8 9 10 | 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の修飾子でもいけるんだね