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

InversifyJS报错No matching bindings for serviceIdentifier: String如何解决

错误原因
  • 子类ServiceName的依赖注入与父类要求不匹配。父类Name构造函数需要接收DatabaseService、GenesisApiService两个服务实例,但子类构造函数注入的是自身类(会触发循环依赖)和Service2Name实例,类型完全不符,且调用super时传入的是类构造函数本身而非实例,Inversify解析依赖时识别到错误类型,触发了String绑定缺失的报错。
  • 容器依赖绑定不全。你仅绑定了ServiceName标识符,代码中用到的DatabaseService、GenesisApiService、Service2Name三个标识符都没有完成绑定,Inversify找不到对应服务实现。
  • 方法调用非法。你获取ServiceName实例后调用的service.get()方法在类中根本不存在,类仅定义了fullSync和incrementalSync两个方法。
解决方案
  1. 修正实现类的注入逻辑与父类传参
@injectable()
export class ServiceName extends Name {
  tableName = "Name";

  constructor(
    // 注入父类要求的对应服务,标识符和父类保持一致
    @inject("DatabaseService") db: DatabaseService,
    @inject("GenesisApiService") api: GenesisApiService
  ) {
    // 把注入得到的实例直接传给父类
    super(db, api);
  }

  async fullSync(accountId: number): Promise<void> {
    const apiUrl = "/servlet/rs/v1/schedule/fetch/incrementalSync?authToken=";
    const result = await this.api.get(apiUrl);
    console.log("result", result);
  }

  async incrementalSync(accountId: number): Promise<void> {
    // 符合返回值要求,不要返回null
    return Promise.resolve();
  }
}
  1. 补全容器的依赖绑定
import "reflect-metadata";
import { Container } from "inversify";
import { ServiceName } from "./services/ServiceName/ServiceName";
// 导入你自己实现的对应服务类
import { DatabaseService } from "./services/DatabaseService";
import { GenesisApiService } from "./services/genesis-api";

export const container = new Container({
  autoBindInjectable: true,
  skipBaseClassChecks: true,
});

// 补全所有用到的服务绑定
container.bind<DatabaseService>("DatabaseService").to(DatabaseService);
container.bind<GenesisApiService>("GenesisApiService").to(GenesisApiService);
container.bind<ServiceName>("ServiceName").to(ServiceName); 
  1. 修正服务调用逻辑,避免重名和调用不存在的方法
import { container } from "../ioc";

// 不要和类名重名避免冲突
export const runService = async () => {
  try {
    console.log("@@@@@@@@@@@@@1");
    const service = container.get<ServiceName>("ServiceName");
    // 调用类中存在的方法,传入正确的数字类型accountId
    await service.fullSync(123321);
  } catch (error) {
    console.log("error", error);
  }
};

runService();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:15:05