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 automatically

Auto-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>()  // ❌ UnresolvableDependencyException

See 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.