我正在尝试用 InversifyJS 创建一个忍者。可以说我的忍者可以同时使用多种武器进行战斗。我可以用 @multiInject() 装饰器来实现它:
@injectable()
class Ninja implements Warrior {
private _weapons: Weapon[];
public constructor(
@multiInject(TYPES.Weapon) weapons: Weapon[],
) {
this._weapons = weapons;
}
public fight() {
this._weapons.forEach( weapon => weapon.fight());
}
}
container.bind(TYPES.Weapon).to(Katana);
container.bind(TYPES.Weapon).to(Shuriken);
如果我将我的武器存储为阵列,那没关系。但是如果我想将它们存储为键值对呢?
private _weapons: { [weaponId: string]: Weapon };
...
public fight() {
this._weapons["katana"].fight();
this._weapons["shuriken"].fight();
}
如何使用 Inversify 实现这一点?