1 of 5
Getting Started
Install kotlin-container and resolve your first dependency tree in under a minute.
Installation
Add the dependency to your build.gradle.kts:
kotlin
dependencies {
implementation("com.cristianllanos:container:0.4.0")
}Your first container
Concrete classes are resolved automatically — the container inspects primary constructors and recursively resolves each parameter. No registration needed.
kotlin
class Logger
class UserRepository(val logger: Logger)
class UserService(val repo: UserRepository)
val container = Container()
val service = container.resolve<UserService>()
// resolves Logger → UserRepository → UserService automaticallyAuto-resolution handles:
- Concrete classes — resolved recursively via their primary constructor
- Registered interfaces/abstracts — resolved from the registry
- Optional parameters with defaults — skipped when unresolvable, using the default value instead
- Required primitives (String, Int, etc.) — throws
UnresolvableDependencyException
kotlin
class Greeter(val name: String = "World", val logger: Logger)
val container = Container()
val greeter = container.resolve<Greeter>()
println(greeter.name) // "World" — default value used
// Without a default, resolution fails:
class Greeter(val name: String, val logger: Logger)
container.resolve<Greeter>() // ❌ UnresolvableDependencyExceptionSee Advanced → Default values for resolution priority and more examples.
DSL builder
Use the lambda builder for setup-in-one-shot — register everything at construction time:
kotlin
val container = Container {
singleton<NotificationService> { SlackNotificationService() }
factory<PaymentGateway> { StripeGateway() }
scoped<DbConnection> { DbConnection(resolve<Config>()) }
}Next steps
Now that you have a container, learn how to control instance lifetimes with bindings.