容器模块 (ContainerModule)
容器模块有助于管理大型应用程序中绑定的复杂性。
构造函数
constructor(registry: interfaces.ContainerModuleCallBack)
ContainerModule 的构造函数参数是一个注册回调,带有用于管理容器模块范围内绑定的函数参数。
bind
bind: interfaces.Bind
有关更多信息,请参阅 文档。
unbind
unbind: interfaces.Unbind
有关更多信息,请参阅 文档。
isBound
isBound: interfaces.IsBound
有关更多信息,请参阅 文档。
rebind
rebind: interfaces.Rebind
有关更多信息,请参阅 文档。
unbindAsync
unbindAsync: interfaces.UnbindAsync
有关更多信息,请参阅 文档。
onActivation
onActivation: interfaces.Container['onActivation']
有关更多信息,请参阅 文档。
onDeactivation
onDeactivation: interfaces.Container['onDeactivation']
有关更多信息,请参阅 文档。
示例:通过 ContainerModule API 绑定服务
当容器模块加载到容器中时,将调用注册回调。这是容器模块注册绑定和处理程序的机会。对 ContainerModule 实例使用容器 load 方法,对 AsyncContainerModule 实例使用容器 loadAsync 方法。
当容器模块从容器中卸载时,该容器添加的绑定将被删除,并且每个绑定都将发生 停用过程。容器停用和 激活处理程序 也将被删除。当有异步停用处理程序或异步 preDestroy 时,使用 unloadAsync 方法进行卸载。
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');