nestjs全局pubsub实例和依赖项注入 [英] nestjs global pubsub instance and dependency injection

查看:23
本文介绍了nestjs全局pubsub实例和依赖项注入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遵循了Nestjs DOCS关于发布/订阅的说明:

根据示例,pubsub在给定解析器的顶部使用以下命令进行初始化:

const pubSub = new PubSub();

后来文档说:

"我们在这里使用了一个本地的PubSub实例。相反,我们应该将PubSub定义为提供程序,通过构造函数(使用@Inject()修饰器)注入它,并在整个应用程序中重用它"

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

这将通向何处?
即,如何在我的主应用程序模块中提供此功能,以便在所有其他模块中都可用,其语法/方法是什么?

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

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

一些-Resolution ver.js

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

提供: Nest无法解析MyResolver的依赖项( MyResolver由MyModule提供

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

是否定义仅提供pub_sub实例的新模块?

推荐答案

如果您希望所有其他模块都可以轻松使用它,我建议您创建一个PubSubModule来提供您的PubSub,如果您必须导入该模块,则将其导出,或者只将该模块标记为@Global(),以便可以在任何位置插入@Global()

导出方法

@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 {}

这篇关于nestjs全局pubsub实例和依赖项注入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆