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 {}
我关注了关于 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 {}