Jorge Castillo
03/12/2019, 10:44 AMsalomonbrys
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 possiblesalomonbrys
03/12/2019, 10:48 AMapi
, just to see if it fixes the issue ?Jorge Castillo
03/12/2019, 10:48 AMapi
also fixes it, at least for a local gradle third party modulesalomonbrys
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 AMsalomonbrys
03/12/2019, 10:51 AMruntimeOnly
instead of implementation
?Jorge 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 etcsalomonbrys
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 AMsalomonbrys
03/12/2019, 11:00 AMclass Whatever {
val myDep: MyDep by lazy { kodein().direct.instance() }
}
class Whatever {
val kodein by lazy { appKodein() }
val myDep: MyDep by lazy { kodein.direct.instance() }
}
Jorge 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()) }
}
Jorge Castillo
03/12/2019, 11:07 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 AMsalomonbrys
03/12/2019, 11:15 AMJorge Castillo
03/12/2019, 11:15 AMKodeinProperty<Deps>
private val deps: Deps by lazy { Deps(kodein()) }}
salomonbrys
03/12/2019, 11:16 AM.direct
Jorge Castillo
03/12/2019, 11:16 AMsalomonbrys
03/12/2019, 11:16 AMJorge Castillo
03/12/2019, 11:16 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)
}
salomonbrys
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 by
Jorge 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 AM