嗨,朋友们,你好吗?
我正在尝试做一些不同的事情,我不知道它是否与概念本身背道而驰,但这将帮助我以一种优雅的方式实现我正在尝试做的事情。
我使用的是存储库模式,在实现中,我想使用重载的构造函数并使用可选的参数,基本上在需要时传递一些辅助信息。
问题是,当构造函数为空时,它工作得很好,但是当更改签名以接收另一个参数时,TSYSRINGE会抛出一个执行。
我真的认为我缺少了一些非常简单的东西,但是我不知道是什么。你能帮我这个忙吗?谢谢
错误:
Error: Cannot inject the dependency at position #0 of "ListProjectsServices" constructor. Reason:
TypeInfo not known for "ProjectsRepository"
控制者
export default class ProjectsController {
public async index(request: Request, response: Response): Promise<void> {
const listProjectsServices = container.resolve(ListProjectsServices);
const projects = await listProjectsServices.execute();
response.json(projects);
}
服务
@injectable()
export default class ListProjectsServices {
constructor(
@inject('ProjectsRepository')
private ProjectsRepository: IProjectsRepository,
) {}
public async execute(): Promise<Projects[]> {
const ProjectsList = await this.ProjectsRepository.findAllProjects();
return ProjectsList;
}
}
容器-创建注入令牌
container.registerSingleton<IProjectsRepository>(
'ProjectsRepository',
ProjectsRepository,
);
存储库-注意构造函数中的extra_details参数
添加后,出现问题
@EntityRepository(Projects)
export default class ProjectsRepository implements IProjectsRepository {
private ormRepository: Repository<Projects>;
constructor(extra_details?: object) {
this.ormRepository = getRepository(Projects);
}
[...]
今天,我遇到了同样的问题。阅读此文章的循环依赖。它告诉我们使用从tsyringe导入的延迟函数。在文章中,他告诉我们在构造函数内部使用延迟。但是您和我一样,不是直接在注入中发送对象,而是注册的密钥。然后,必须在容器文件中使用延迟,在存储库对象周围尝试以下操作:
import { container, delay } from 'tsyringe';
container.registerSingleton<IProjectsRepository>(
'ProjectsRepository',
delay(() => ProjectsRepository),
);
在所有依赖异步存储库的注入中插入延迟
seo ormconfig.json中的entities属性中也可能是错误。确保路径指向您的实体:
"entities": [
"./src/modules/**/infra/typeorm/entities/*.ts"
],
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句