gpt4 book ai didi

dependency-injection - nestjs 全局 pubsub 实例和依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-04 12:25:02 24 4
gpt4 key购买 nike

我遵循了关于 pubsub/subsciprtions 的 Nestjs DOCS:

根据示例,pubsub 在给定解析器的顶部初始化:

const pubSub = new PubSub();

后来文档说:

“我们在这里使用了本地 PubSub 实例。相反,我们应该将 PubSub 定义为提供者,通过构造函数注入(inject)它(使用 @Inject() 装饰器),并在整个应用程序中重用它”
{
provide: 'PUB_SUB',
useValue: new PubSub(),
}

这去哪儿了?
IE。如何在我的主 app.module 中提供它以便它在所有其他模块中可用的语法/方法是什么?

如果我尝试将其作为不同模块中的依赖项提供,我将遇到依赖项解析问题。
应用模块
  providers: [
AppService,
{
provide: APP_FILTER,
useClass: AllExceptionsFilter,
},
{
provide: 'PUB_SUB',
useValue: new PubSub(),
},

some-resolver.js
  constructor(
@Inject('PUB_SUB')
private pubSub: PubSub,

给出:
Nest 无法解析 MyResolver (
MyResolver 由 MyModule 提供

我无法将 appmodule 导入 MyModule,否则我将创建循环依赖。

我是否定义了一个仅提供 pub_sub 实例的新模块?

最佳答案

如果您正在寻找它可以轻松用于所有其他模块,我建议创建一个 PubSubModule提供您的 PubSub如果您想导入模块,或者只是将模块标记为 @Global() 并导出它所以可以在任何地方注入(inject) PubSub

导出方式

@Module({
providers: [
{
provide: 'PUB_SUB',
useClass: PubSub,
// useValue: new PubSub(),
// useFactory: () => {
// return new PubSub();
// }
}
],
exports: ['PUB_SUB'],
})
export class PubSubModule {}

全局方法

@Global()
@Module({
providers: [
{
provide: 'PUB_SUB',
useClass: PubSub,
// useValue: new PubSub(),
// useFactory: () => {
// return new PubSub();
// }
}
],
})
export class PubSubModule {}

关于dependency-injection - nestjs 全局 pubsub 实例和依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59104427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com