Skip to main content

ContainerModule

Container modules help manage the complexity of bindings in large applications.

Constructor

constructor(registry: interfaces.ContainerModuleCallBack)

The constructor argument for ContainerModule is a registration callback with function parameters to manage bindings within the scope of the container module.

bind

bind: interfaces.Bind

Refer to the docs for more information.

unbind

unbind: interfaces.Unbind

Refer to the docs for more information.

isBound

isBound: interfaces.IsBound

Refer to the docs for more information.

rebind

rebind: interfaces.Rebind

Refer to the docs for more information.

unbindAsync

unbindAsync: interfaces.UnbindAsync

Refer to the docs for more information.

onActivation

onActivation: interfaces.Container['onActivation']

Refer to the docs for more information.

onDeactivation

onDeactivation: interfaces.Container['onDeactivation']

Refer to the docs for more information.

Example: binding services through ContainerModule API

When a container module is loaded into a Container, the registration callback is invoked. This is the opportunity for the container module to register bindings and handlers. Use the Container load method for ContainerModule instances and the Container loadAsync method for AsyncContainerModule instances.

When a container module is unloaded from a Container, the bindings added by that container will be removed, and the deactivation process will occur for each of them. Container deactivation and activation handlers will also be removed. Use the unloadAsync method to unload when there will be an async deactivation handler or async preDestroy.

const warriorsModule: ContainerModule = new ContainerModule(
(bind: interfaces.Bind) => {
bind<Ninja>('Ninja').to(Ninja);
},
);

const weaponsModule: ContainerModule = new ContainerModule(
(
bind: interfaces.Bind,
_unbind: interfaces.Unbind,
_isBound: interfaces.IsBound,
_rebind: interfaces.Rebind,
_unbindAsync: interfaces.UnbindAsync,
_onActivation: interfaces.Container['onActivation'],
_onDeactivation: interfaces.Container['onDeactivation'],
) => {
bind<Katana>('Weapon').to(Katana).whenTargetNamed('Melee');
bind<Shuriken>('Weapon').to(Shuriken).whenTargetNamed('Ranged');
},
);

const container: Container = new Container();
container.load(warriorsModule, weaponsModule);

const ninja: Ninja = container.get('Ninja');