nestjs全局pubsub实例和依赖项注入 [英] nestjs global pubsub instance and dependency injection
本文介绍了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屋!
查看全文