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

标签 dependency-injection publish-subscribe nestjs

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

相关文章:

datatables - 使用 meteor subscribe onReady 函数,然后观察重复数据中的结果

wpf - 在 wpf MVVM 应用程序上使用 Unity 进行依赖注入(inject)

c# - 注入(inject) InSingletonScope 的对象是否也可以注入(inject)到其他地方的多重绑定(bind)中?

node.js - Google Cloud Pub/Sub 重试次数

javascript - NodeJS ZeroMQ - 连接后生产者何时准备好发送消息?

javascript - 在 e2e 测试 NestJS 时使用测试数据库

javascript - 区分 Controller 的 2 条路由(NestJS)

angular - 后台图片不显示

c# - MVVM - 在 ViewModel 中使用实体

c# - Caliburn 微构造函数注入(inject)失败