Kodein-DI
Introduction: Painless Kotlin Dependency Injection
Tags:
KODEIN is a straightforward and yet very useful dependency retrieval container. it is effortless to use and configure.
KODEIN works on all Kotlin Multiplatform targets:
- JVM / Android.
- all Native platforms (iOS, macOS, Linux, Windows, WebAssembly).
- Javascript / WasmJs.
KODEIN allows you to:
- Lazily instantiate your dependencies when needed
- Stop caring about dependency initialization order
- Bind classes or interfaces to their instance or provider
- Debug your dependency bindings and recursions
KODEIN provides extensions to be integrable into:
An example is always better than a thousand words:
val di = DI {
bindProvider<Dice> { RandomDice(0, 5) }
bindSingleton<DataSource> { SqliteDS.open("path/to/file") }
}
class Controller(private di: DI) {
private val ds: DataSource by di.instance()
}
KODEIN is a good choice because:
- It proposes a very simple and readable declarative DSL
- It is not subject to type erasure (as Java is)
- It integrates nicely with Android
- It proposes a very kotlin-esque idiomatic API
- It is fast and optimized (makes extensive use of
inline
)
Installation
Kodein is available on Maven Central.
repositories {
mavenCentral()
}
kotlin {
sourceSets {
commonMain {
dependencies {
implementation("org.kodein.di:kodein-di:{version}")
}
}
}
}
KODEIN 7+ is the current major version, but documentation is available for previous versions.
Kotlin & JVM compatibility
Kodein | Kotlin | JDK |
---|---|---|
7.21.+ | 1.9.+ | min 1.8 |
7.20.1 | 1.8.10 | min 1.8 |
7.19.0 | 1.8.10 | min 1.8 |
7.18.0 | 1.8.0 | min 1.8 |
7.17.1 | 1.8.0 | min 1.8 |
7.17.0 | 1.8.0 | min 1.8 |
Full table can be found here
Support
Support is held in the Kodein Slack channel (you can get an invitation to the Kotlin Slack here).
//: # ()
//: # ()
//: # ()
//: # ()
//: # ()
//: # ()
//: # ()
//: # ()
//: # ()
//: # ()
//: # ()
//: # ()
//: # ()
If you are using KODEIN, please let us know!