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两个方法。
解决方案
- 修正实现类的注入逻辑与父类传参
@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(); } }
- 补全容器的依赖绑定
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);
- 修正服务调用逻辑,避免重名和调用不存在的方法
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
相关产品推荐
相关产品推荐

