I had the same issue. Turns out that I was missing this dependency import org.kodein.di.android.x.kodein
(not sure why it was not automatically added by IDE)
Here is an example of Kodein
+ AndroidX
libraries:
AndroidManifest.xml
<application
...
android:name=".core.BaseApplication">
Application
open class BaseApplication : Application(), KodeinAware {
override val kodein = Kodein.lazy {
import(androidXModule(this@BaseApplication))
// import(otherCustomModule)
}
}
Fragments
import androidx.fragment.app.Fragment
import org.kodein.di.Kodein
import org.kodein.di.KodeinAware
import org.kodein.di.android.x.kodein
import org.kodein.di.generic.kcontext
abstract class InjectionFragment : Fragment(), KodeinAware {
final override val kodeinContext = kcontext<Fragment>(this)
final override val kodein: Kodein by kodein()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
kodeinTrigger?.trigger()
}
}
// usage
class MyFragment() : InjectionFragment() {
val someDependency: Type by instance()
}
Dependencies app\build.gradle
implementation "org.kodein.di:kodein-di-generic-jvm:6.3.2"
implementation "org.kodein.di:kodein-di-framework-android-x:6.3.2"
implementation "androidx.appcompat:appcompat:1.0.2"
Extra
It is also worth to override kodeinTrigger
property (from KodeinAware
). This way all the dependencies for debug
builds will be resolved when Fragment is created, so app will fail instantly (as opposed to release
builds where dependency is resolved only when it is used - some user paths may not crash the app)
abstract class InjectionFragment : Fragment(), KodeinAware {
final override val kodeinContext = kcontext<Fragment>(this)
final override val kodein: Kodein by kodein()
final override val kodeinTrigger: KodeinTrigger? // See description in InjectionActivity
get() = if (BuildConfig.DEBUG) KodeinTrigger() else super.kodeinTrigger
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
kodeinTrigger?.trigger()
}
}
Edit:
Here is my project where everything is wired together https://github.com/igorwojda/Android-Showcase