无法在位置 #0 注入依赖项,因为 TypeInfo 未知
Cannot inject the depency at position #0 because TypeInfo not known
我遇到了这个问题:
[ERROR] 14:07:18 Error: Cannot inject the dependency at position #0 of "ListInterviewPagesUseCase" constructor. Reason: TypeInfo not known for "InterviewPagesRepository"
容器
import { container } from "tsyringe";
import { InterviewPagesRepository } from "../../modules/interview/repositories/implementations/InterviewPagesRepository";
import "./providers";
container.registerSingleton(
"InterviewPagesRepository",
InterviewPagesRepository
);
控制器
import { Request, Response } from "express";
import { container } from "tsyringe";
import { ListInterviewPagesUseCase } from "./ListInterviewPagesUseCase";
class ListInterviewPagesController {
async handle(request: Request, response: Response): Promise<Response> {
const listInterviewPagesUseCase = container.resolve(
ListInterviewPagesUseCase
);
const interviewPages = await listInterviewPagesUseCase.execute();
return response.json(interviewPages);
}
}
export { ListInterviewPagesController };
用例
import { inject, injectable } from "tsyringe";
import { InterviewPage } from "../../entities/InterviewPage";
import { IInterviewPagesRepository } from "../../repositories/IInterviewPagesRepository";
@injectable()
class ListInterviewPagesUseCase {
constructor(
@inject("InterviewPagesRepository")
private interviewPagesRepository: IInterviewPagesRepository
) {}
async execute(): Promise<InterviewPage[]> {
const interviewPages = await this.interviewPagesRepository.all();
return interviewPages;
}
}
export { ListInterviewPagesUseCase };
它在 windows 上正常工作,但现在我已更改为 mac 并停止工作。我已经从 tsrynge
中输入 delay
但仍然不起作用。
当我调用使用此存储库的路由时会发生这种情况,但看起来没问题,数据库已创建。
我在应用程序文件中导入:
import "reflect-metadata";
import "dotenv/config";
import "./database";
import "./shared/container";
import cors from "cors";
import express from "express";
import swaggerUi from "swagger-ui-express";
import { router } from "./routes";
import swaggerFile from "./swagger.json";
考虑用 @singleton
修饰 InterviewPagesRepository
,而不是自己调用 container.registerSingleton
:
import { singleton } from "tsyringe";
@singleton()
class InterviewPagesRepository {
@singleton
装饰器does invoke registerSingleton()
inside, like you do, but it also stores it to be used in parameters of other constructors (see 1 → 2, and then 3 → 4 → 5).
我遇到了这个问题:
[ERROR] 14:07:18 Error: Cannot inject the dependency at position #0 of "ListInterviewPagesUseCase" constructor. Reason: TypeInfo not known for "InterviewPagesRepository"
容器
import { container } from "tsyringe";
import { InterviewPagesRepository } from "../../modules/interview/repositories/implementations/InterviewPagesRepository";
import "./providers";
container.registerSingleton(
"InterviewPagesRepository",
InterviewPagesRepository
);
控制器
import { Request, Response } from "express";
import { container } from "tsyringe";
import { ListInterviewPagesUseCase } from "./ListInterviewPagesUseCase";
class ListInterviewPagesController {
async handle(request: Request, response: Response): Promise<Response> {
const listInterviewPagesUseCase = container.resolve(
ListInterviewPagesUseCase
);
const interviewPages = await listInterviewPagesUseCase.execute();
return response.json(interviewPages);
}
}
export { ListInterviewPagesController };
用例
import { inject, injectable } from "tsyringe";
import { InterviewPage } from "../../entities/InterviewPage";
import { IInterviewPagesRepository } from "../../repositories/IInterviewPagesRepository";
@injectable()
class ListInterviewPagesUseCase {
constructor(
@inject("InterviewPagesRepository")
private interviewPagesRepository: IInterviewPagesRepository
) {}
async execute(): Promise<InterviewPage[]> {
const interviewPages = await this.interviewPagesRepository.all();
return interviewPages;
}
}
export { ListInterviewPagesUseCase };
它在 windows 上正常工作,但现在我已更改为 mac 并停止工作。我已经从 tsrynge
中输入 delay
但仍然不起作用。
当我调用使用此存储库的路由时会发生这种情况,但看起来没问题,数据库已创建。
我在应用程序文件中导入:
import "reflect-metadata";
import "dotenv/config";
import "./database";
import "./shared/container";
import cors from "cors";
import express from "express";
import swaggerUi from "swagger-ui-express";
import { router } from "./routes";
import swaggerFile from "./swagger.json";
考虑用 @singleton
修饰 InterviewPagesRepository
,而不是自己调用 container.registerSingleton
:
import { singleton } from "tsyringe";
@singleton()
class InterviewPagesRepository {
@singleton
装饰器does invoke registerSingleton()
inside, like you do, but it also stores it to be used in parameters of other constructors (see 1 → 2, and then 3 → 4 → 5).