You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在InversifyJS中实现多命名依赖注入并解决多注入报错?

解决InversifyJS命名绑定与多注入冲突问题

你遇到的问题根源在于:所有Weapon绑定都添加了whenTargetNamed条件,而@multiInject('Weapon')执行注入时未指定命名,导致绑定条件不匹配,因此抛出找不到绑定的错误。以下是两种可行的解决方法:

方案一:新增专属多注入标识符

  • 保留原有命名绑定逻辑,同时新增一个专门用于多注入的标识符(例如'AllWeapons'),将所有武器类绑定到该标识符下:
// 原有命名绑定保持不变
container.bind<Weapon>('Weapon').to(Stick).whenTargetNamed('stick');
container.bind<Weapon>('Weapon').to(Katana).whenTargetNamed('katana');

// 新增多注入绑定
container.bind<Weapon>('AllWeapons').to(Stick);
container.bind<Weapon>('AllWeapons').to(Katana);
  • 注入所有武器实例时,使用这个新的标识符:
@multiInject('AllWeapons') weapons: Weapon[];
  • 单独注入指定命名武器的代码无需修改:
@inject('Weapon') @named('katana') katana: Katana;

方案二:修改绑定条件兼容多注入

  • 调整原有绑定的条件,让它们同时支持命名注入和多注入请求:
container.bind<Weapon>('Weapon')
  .to(Stick)
  .when(request => 
    // 匹配命名为stick的单一注入,或任意多注入请求
    request.target.named === 'stick' || request.target.multiInject === true
  );

container.bind<Weapon>('Weapon')
  .to(Katana)
  .when(request => 
    request.target.named === 'katana' || request.target.multiInject === true
  );
  • 此时原有的注入代码完全无需修改,两种注入方式都能正常工作:
@multiInject('Weapon') weapons: Weapon[];
@inject('Weapon') @named('katana') katana: Katana;

内容的提问来源于stack exchange,提问作者briarheart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 18:13:26