Skip to Content
DocsClaDICore ConceptsContainer Fundamentals

Container Fundamentals

ClaDI container usage is centered on explicit composition roots.

Core Operations

  • createDIContainer(options)
  • register(provider | provider[])
  • resolve / resolveAsync
  • resolveAll / resolveAllAsync
  • resolveOptional
  • createScope(name?)
  • dispose()
  • validate()
  • bootstrap(tokens?)
  • lock() and isLocked
  • explain(token) and snapshot()
  • exportGraph()

Provider Shape

src/container-registration.ts
container.register({ provide: SomeToken, lifecycle: EDependencyLifecycle.SCOPED, deps: [DependencyToken], useFactory: (dependency) => new Service(dependency), });

Supported strategies:

  • useValue
  • useClass
  • useFactory
  • useExisting
  • useLazy

Scope Model

  • Root scope owns root singleton caches.
  • Child scopes inherit registrations and can add local overrides.
  • Scoped providers are cached per request scope.
  • Disposing a scope runs tracked cleanup callbacks in deterministic order.
  1. Create root container.
  2. Register all composition providers.
  3. Run validate() once at startup.
  4. Optionally run bootstrap() to pre-warm singleton providers.
  5. Lock root registrations with lock() when startup wiring is complete.
  6. Create per-request/per-job scopes.
  7. Dispose scopes in finally.
Last updated on