Jorge Castillo
03/12/2019, 10:44 AMsalomonbrys
03/12/2019, 10:46 AMJorge Castillo
03/12/2019, 10:46 AMJorge Castillo
03/12/2019, 10:46 AMapi since don’t want to expose its APIs to the third party, if possibleJorge Castillo
03/12/2019, 10:47 AMsalomonbrys
03/12/2019, 10:48 AMapi, just to see if it fixes the issue ?Jorge Castillo
03/12/2019, 10:48 AMJorge Castillo
03/12/2019, 10:48 AMapi also fixes it, at least for a local gradle third party moduleJorge Castillo
03/12/2019, 10:49 AMsalomonbrys
03/12/2019, 10:49 AMJorge Castillo
03/12/2019, 10:49 AMapp module (working as a third party here) would never need to fetch Kodeinsalomonbrys
03/12/2019, 10:50 AMJorge Castillo
03/12/2019, 10:50 AMJorge Castillo
03/12/2019, 10:50 AMJorge Castillo
03/12/2019, 10:50 AMsalomonbrys
03/12/2019, 10:51 AMsalomonbrys
03/12/2019, 10:51 AMruntimeOnly instead of implementation ?salomonbrys
03/12/2019, 10:52 AMsalomonbrys
03/12/2019, 10:52 AMJorge Castillo
03/12/2019, 10:52 AMJorge Castillo
03/12/2019, 10:52 AMJorge Castillo
03/12/2019, 10:52 AMsalomonbrys
03/12/2019, 10:53 AMimplementation should work, as the app should fetch it for runtime, not for compile time : https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_configurations_graphJorge Castillo
03/12/2019, 10:54 AMsalomonbrys
03/12/2019, 10:54 AMJorge Castillo
03/12/2019, 10:55 AMsalomonbrys
03/12/2019, 10:55 AMJorge Castillo
03/12/2019, 10:55 AMsalomonbrys
03/12/2019, 10:55 AMKodeinAware.Jorge Castillo
03/12/2019, 10:56 AMapi for Kodein deps inside our lib so they get exposed to the third party classpath. Doable but not ideal since third party would not need to even see those in the auto complete etcJorge Castillo
03/12/2019, 10:57 AMJorge Castillo
03/12/2019, 10:57 AMsalomonbrys
03/12/2019, 10:58 AMclass Whatever(override val kodein: Kodein) : KodeinAware {
val myDep: MyDep by instance()
}
Do:
class Whatever(private val kodein: Kodein) {
val myDep: MyDep by kodein.instance()
}Jorge Castillo
03/12/2019, 10:58 AMJorge Castillo
03/12/2019, 10:59 AMsalomonbrys
03/12/2019, 11:00 AMclass Whatever {
val myDep: MyDep by lazy { kodein().direct.instance() }
}salomonbrys
03/12/2019, 11:02 AMclass Whatever {
val kodein by lazy { appKodein() }
val myDep: MyDep by lazy { kodein.direct.instance() }
}salomonbrys
03/12/2019, 11:02 AMJorge Castillo
03/12/2019, 11:03 AMsalomonbrys
03/12/2019, 11:05 AMclass Whatever {
private class Deps(override val kodein: Kodein) : KodeinAware {
val myDep: MyDep by instance()
}
private val deps: Deps by lazy { Deps(kodein()) }
}salomonbrys
03/12/2019, 11:07 AMJorge Castillo
03/12/2019, 11:07 AMJorge Castillo
03/12/2019, 11:09 AMsalomonbrys
03/12/2019, 11:10 AMJorge Castillo
03/12/2019, 11:14 AMsalomonbrys
03/12/2019, 11:14 AMJorge Castillo
03/12/2019, 11:15 AMJorge Castillo
03/12/2019, 11:15 AMJorge Castillo
03/12/2019, 11:15 AMsalomonbrys
03/12/2019, 11:15 AMJorge Castillo
03/12/2019, 11:15 AMKodeinProperty<Deps>Jorge Castillo
03/12/2019, 11:16 AMJorge Castillo
03/12/2019, 11:16 AMprivate val deps: Deps by lazy { Deps(kodein()) }}salomonbrys
03/12/2019, 11:16 AM.directJorge Castillo
03/12/2019, 11:16 AMsalomonbrys
03/12/2019, 11:16 AMJorge Castillo
03/12/2019, 11:16 AMJorge Castillo
03/12/2019, 11:18 AMval kodein by lazy {
Kodein { import(appModule(Deps())) }
}
private val viewModelFactory by lazy { kodein.instance<ViewModelProvider.Factory>(tag = AppQualifier) }
...
override fun onCreate() {
viewModel = getViewModel(viewModelFactory)
}Jorge Castillo
03/12/2019, 11:18 AMsalomonbrys
03/12/2019, 11:18 AMprivate val viewModelFactory by lazy { kodein.DIRECT.instance<ViewModelProvider.Factory>(tag = AppQualifier) }Jorge Castillo
03/12/2019, 11:18 AMsalomonbrys
03/12/2019, 11:19 AM.direct in lowercase, obviously)Jorge Castillo
03/12/2019, 11:19 AMsalomonbrys
03/12/2019, 11:19 AMKodeinProperty, which is meant to be used with byJorge Castillo
03/12/2019, 11:20 AMsalomonbrys
03/12/2019, 11:21 AMlazy expects the instance.
Using by instance() is a way of being lazy without writing by lazy {} everytime.Jorge Castillo
03/12/2019, 11:21 AMJorge Castillo
03/12/2019, 11:22 AM