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