javascript - tsyringe - 使用重载的构造函数注入依赖项
问题描述
嗨朋友你好吗?
我正在尝试做一些不同的事情,我不知道它是否偏离了概念本身,但它会帮助我以一种优雅的方式实现我想要做的事情。
我正在使用存储库模式,在实现中我想使用重载的构造函数并使用可选参数,基本上在需要时传递一些 adicional 信息。
问题是,当构造函数为空时它工作得很好,但是当更改签名以接收更多参数时,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,
);
Repository - 注意构造函数中的 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": [
"./src/modules/**/infra/typeorm/entities/*.ts"
],
推荐阅读
- reactjs - React + Jest:如何测试私有样式的组件?
- python-3.x - 教程 tensorflow 音频音高分析
- batch-file - 如何在使用代码页 437 时回显特殊字符,例如 »?
- c++ - 如何使用 CMake 生成链接到静态库的 DLL
- ruby-on-rails - 如何使用 rspec 正确测试 ActiveJob 的 retry_on 方法?
- python - Jupyter Notebook python内核在打开时很忙
- android - 如何将 3rd 方 cpp 库作为依赖项添加到 android
- azure-data-factory - 无法设置 GitHub 存储库
- python - 文件所有者的历史 - os.stat
- c# - 带有对象返回的 C# 线程函数