bak*_*aku 6 dependency-injection publish-subscribe nestjs
我遵循了有关 pubsub/subsciprtions 的 Nestjs DOCS:
根据示例, pubsub 在给定解析器的顶部初始化为:
const pubSub = new PubSub();
Run Code Online (Sandbox Code Playgroud)
后来文档说:
“我们在这里使用了本地 PubSub 实例。相反,我们应该将 PubSub 定义为提供者,通过构造函数注入它(使用 @Inject() 装饰器),并在整个应用程序中重用它”
{
provide: 'PUB_SUB',
useValue: new PubSub(),
}
Run Code Online (Sandbox Code Playgroud)
但这会去哪里呢?
即如何在我的主 app.module 中提供此功能以便它在所有其他模块中可用的语法/方法是什么?
如果我尝试将其作为不同模块中的依赖项提供,我会遇到依赖项解析问题。应用程序模块
providers: [
AppService,
{
provide: APP_FILTER,
useClass: AllExceptionsFilter,
},
{
provide: 'PUB_SUB',
useValue: new PubSub(),
},
Run Code Online (Sandbox Code Playgroud)
一些解析器.js
constructor(
@Inject('PUB_SUB')
private pubSub: PubSub,
Run Code Online (Sandbox Code Playgroud)
给出: Nest 无法解析 MyResolver 的依赖项( MyResolver 由 MyModule 提供
我无法将 appmodule 导入 MyModule,否则我将创建循环依赖。
我是否定义一个仅提供 pub_sub 实例的新模块?
Jay*_*iel 12
如果您正在寻找它可以轻松地供所有其他模块使用,我建议创建一个PubSubModule为您提供PubSub模块并导出它(如果您想必须导入该模块),或者只是将模块标记为以便@Global()PubSub 可以注射到任何地方
@Module({
providers: [
{
provide: 'PUB_SUB',
useClass: PubSub,
// useValue: new PubSub(),
// useFactory: () => {
// return new PubSub();
// }
}
],
exports: ['PUB_SUB'],
})
export class PubSubModule {}
Run Code Online (Sandbox Code Playgroud)
@Global()
@Module({
providers: [
{
provide: 'PUB_SUB',
useClass: PubSub,
// useValue: new PubSub(),
// useFactory: () => {
// return new PubSub();
// }
}
],
})
export class PubSubModule {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2916 次 |
| 最近记录: |