NestJS Bull处理器依赖注入失效,如何调用服务与仓库?
解决NestJS Bull处理器依赖注入问题
以下是具体的解决步骤:
- 给处理器类添加
@Injectable()装饰器
NestJS的依赖注入系统仅对带有@Injectable()装饰器的类生效,你的PromotionProcessor需要添加这个装饰器,才能让Nest自动注入依赖:
import { Injectable } from '@nestjs/common'; import { Process, Processor } from '@nestjs/bull'; import { Job } from 'bull'; @Injectable() @Processor(PACKAGE_PROMOTION) // 类级别指定所属队列 export class PromotionProcessor { constructor(private readonly serviceLayer: ServiceLayer) { } @Process() // 类已指定队列,此处可省略队列名 async processMtPackagePromotion(job: Job<PackagePromotionRequest>): Promise<void> { const { data } = job; const messageData = data as unknown as PromotionRequest; await this.serviceLayer.promoteToNextLifecycle(messageData.data, messageData.reqData); } }
- 将处理器注册到模块的Providers中
把PromotionProcessor添加到你的APP_PROVIDERS数组,确保Nest模块能扫描并管理这个类的实例:
@Module({ imports: [...APP_IMPORTS], controllers: [...APP_CONTROLLERS], providers: [...APP_PROVIDERS, PromotionProcessor], // 加入处理器类 }) export class YourModule {}
- 关联Bull队列与处理器
在APP_IMPORTS的Bull队列注册配置中,明确指定队列对应的处理器:
// APP_IMPORTS中的Bull配置示例 BullModule.registerQueue({ name: PACKAGE_PROMOTION, processor: PromotionProcessor, // 绑定处理器类 })
- 验证依赖的可注入性
确认ServiceLayer及你需要的仓库类都已添加@Injectable()装饰器,并且都在APP_PROVIDERS中注册,确保Nest能正确解析这些依赖并注入到处理器中。
完成以上步骤后,NestJS会自动管理PromotionProcessor的实例,构造注入的ServiceLayer就能正常调用,处理器也可以访问所需的服务与仓库。
内容的提问来源于stack exchange,提问作者Danyal Sandeelo
相关产品推荐
相关产品推荐

