首页 > 解决方案 > InversifyJS @multiInject 键值映射

问题描述

我正在尝试用 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 实现这一点?

标签: javascripttypescriptdependency-injectioninversifyjs

解决方案


推荐阅读