嗨,你好吗?
我正在尝试做一些不同的事情,我不知道它是否与概念本身背道而驰,但这将帮助我以一种优雅的方式实现我想做的事情。
我正在使用存储库模式,在实现中,我想使用重载的构造函数并使用可选参数,基本上在需要时传递一些辅助信息。
问题是,当构造函数为空时,它工作得很好,但是当更改签名以接收更多参数时,TSYSRINGE会抛出一个执行。
我真的认为我缺少一些非常简单的东西,但是我不知道是什么。你能帮我这个忙吗?谢谢
错误:
template<class T>
struct Entity{};
Entity<A> entity_a;
Entity<B> entity_b;
Entity<C> entity_c;
entity_container c(entity_a, entity_b);
c.push_back(entity_c);
控制器
Array(
[124] => Array
(
[0] => 140
[1] => 101
[2] => 107
[3] => 116
[4] => 100
)
)
Array(
[164] => Array
(
[0] => 108
[1] => 111
[2] => 124
[3] => 87
[4] => 278
)
)
Array(
[162] => Array
(
[0] => 6
[1] => 79
[2] => 3
)
)
服务
Array(
[164] => Array
(
[0] => 108
[1] => 111
[2] => 124
[3] => 87
[4] => 278
)
)
Array(
[162] => Array
(
[0] => 6
[1] => 79
[2] => 3
)
)
容器-创建注射令牌
Error: Cannot inject the dependency at position #0 of "ListProjectsServices" constructor. Reason:
TypeInfo not known for "ProjectsRepository"
存储库-注意构造函数中的extra_details参数
添加后,出现问题
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);
}
答案 0 :(得分:1)
今天我遇到了同样的问题。 阅读关于循环依赖的this文章。 它告诉我们使用从tsyringe导入的延迟函数。 在文章中,他告诉我们在构造函数内部使用延迟。 但是您和我一样,不是直接在注入中发送对象,而是注册的密钥。 然后,您必须在容器文件中使用延迟,在存储库对象周围尝试以下操作:
import { container, delay } from 'tsyringe';
container.registerSingleton<IProjectsRepository>(
'ProjectsRepository',
delay(() => ProjectsRepository),
);
插入所有依赖异步存储库的注入延迟
seo ormconfig.json中的entities属性中也可能是错误。 确保路径指向您的实体:
"entities": [
"./src/modules/**/infra/typeorm/entities/*.ts"
],