Skip to content

Child containers

A child container is a DI container that inherits all providers and singletons from its parent (or any ancestor). However, it also allows you to override specific providers or define new ones independently.

Example

ts
import { 
Container
} from "@needle-di/core";
import {
LOGGER
,
MyLogger
,
OtherLogger
} from "./logger";
const
parent
= new
Container
();
const
child1
=
parent
.
createChild
();
const
child2
=
parent
.
createChild
();
parent
.
bind
({
provide
:
LOGGER
,
useClass
:
MyLogger
});
child2
.
bind
({
provide
:
LOGGER
,
useClass
:
OtherLogger
});
const
loggerA
=
parent
.
get
(
LOGGER
); // `MyLogger`
const
loggerB
=
child1
.
get
(
LOGGER
); // `MyLogger` (same instance as parent)
const
loggerC
=
child2
.
get
(
LOGGER
); // `OtherLogger`

Rules and behaviour

  • Singletons are shared with child containers (or any descendant) unless explicitly overridden.
  • Singletons are created in the container where they were first bound, even if they are accessed from a child container.

NOTE

If you bind a multi-provider in a child container, its singletons will not be merged with those from the parent. This is a current limitation, but if you have a strong use case, feel free to submit an issue.

Released under the MIT License