我遵循了关于 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/