激活
每当解析服务时,都会分发激活事件。激活处理程序接收上下文和解析值,并返回处理后的解析值。
interface Weapon {
damage: number;
}
export class Katana implements Weapon {
#damage: number = 10;
public get damage(): number {
return this.#damage;
}
public improve(): void {
this.#damage += 2;
}
}
const container: Container = new Container();
container.bind<Weapon>('Weapon').to(Katana);
container.onActivation(
'Weapon',
(_context: ResolutionContext, katana: Katana): Katana | Promise<Katana> => {
katana.improve();
return katana;
},
);
// Katana.damage is 12
const katana: Weapon = container.get<Weapon>('Weapon');
有多种方法可以提供激活处理程序:
- 将处理程序添加到容器。
- 将处理程序添加到绑定。
- 通过 postConstruct 装饰器将处理程序添加到类。
当多个激活处理程序绑定到一个服务标识符时,postConstruct 处理程序会在任何其他处理程序之前被调用。之后,调用绑定处理程序。然后,调用容器处理程序,从根容器开始,向下到后代容器,在具有绑定的容器处停止。