#javascript #inversifyjs
#язык JavaScript #инверсия
Вопрос:
В шахтном применении с использованием инверсии для контейнеризации
есть абстрактный класс
@injectable() export abstract class Name { tableName: string; constructor( @inject("DatabaseService") public db: DatabaseService, @inject("GenesisApiService") public api: GenesisApiService ) {} abstract fullSync(accountId: number): Promiselt;voidgt;; abstract incrementalSync(accountId: number): Promiselt;voidgt;; }
также есть класс, который расширяет этот абстрактный класс
@injectable() export class ServiceName extends Name { tableName = "Name"; constructor( @inject("ServiceName") db: ServiceName, @inject("Service2Name") api: Service2Name ) { super(ServiceName, Service2Name); } async fullSync(accountId: number): Promiselt;voidgt; { const apiUrl = "/servlet/rs/v1/schedule/fetch/incrementalSync?authToken="; const result = await this.api.get(apiUrl); console.log("result", result); } async incrementalSync(accountId: number): Promiselt;voidgt; { return null; } }
после того, как я помещен в контейнер, как в документации
import "reflect-metadata"; import { Container } from "inversify"; import { ServiceName } from "./services/ServiceName/ServiceName"; export const container = new Container({ autoBindInjectable: true, skipBaseClassChecks: true, }); container.bindlt;ServiceNamegt;("ServiceName").to(ServiceName);
после попытки вызвать методы обслуживания
import { container } from "../ioc"; import { GenesisApiService } from "../services/genesis-api"; export const ServiceName = async () =gt; { try { console.log("@@@@@@@@@@@@@1"); const service = container.getlt;ServiceNamegt;("ServiceName"); await service.get("123321"); } catch (error) { console.log("error", error); } }; ServiceName();
и получаю эту ошибку
Error: No matching bindings found for serviceIdentifier: String