nestjs 全局 pubsub 实例和依赖注入

nestjs global pubsub instance and dependency injection

我关注了关于 pubsub/subsciprtions 的 Nestjs 文档:

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

const pubSub = new PubSub();

稍后文档说:

"We used a local PubSub instance here. Instead, we should define PubSub as a provider, inject it through the constructor (using @Inject() decorator), and reuse it among the whole application"

{
  provide: 'PUB_SUB',
  useValue: new PubSub(),
}

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

如果我尝试在不同的模块中将其作为依赖项提供,我会遇到依赖项解析问题。 app.module

  providers: [
    AppService,
    {
      provide: APP_FILTER,
      useClass: AllExceptionsFilter,
    },
    {
      provide: 'PUB_SUB',
      useValue: new PubSub(),
    },

一些-resolver.js

  constructor(
    @Inject('PUB_SUB')
    private pubSub: PubSub,

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

提供

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

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

如果您希望它可以轻松地供所有其他模块使用,我建议创建一个 PubSubModule 来提供您的 PubSub 并在您需要导入时导出它模块,或者只是将模块标记为 @Global() 因此 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 {}