NestJS中Scope工作机制:注入REQUEST后服务是否自动为请求作用域?
问题解答
是的,这个CatsService会自动成为请求作用域。
原因如下:
- 在NestJS的依赖注入体系中,当一个类注入了请求作用域的提供者(比如示例中的
REQUEST令牌对应的请求实例),该类会被自动提升为请求作用域,无需手动添加@Injectable({ scope: Scope.REQUEST })装饰器。 - Nest会自动追踪依赖链的作用域:只要某个类的依赖中存在请求作用域的对象,这个类就会被调整为请求作用域,以此保证每次请求都能获取到对应的请求上下文实例,避免单例模式下的上下文混乱问题。
补充说明:如果后续有控制器(比如CatsController)依赖这个CatsService,该控制器也会自动变为请求作用域,和你提供的依赖关系示例逻辑一致。
补充完整装饰器后的示例代码:
import { Injectable, Scope, Inject } from '@nestjs/common'; import { REQUEST } from '@nestjs/core'; import { Request } from 'express'; @Injectable() export class CatsService { constructor(@Inject(REQUEST) private request: Request) {} }
内容的提问来源于stack exchange,提问作者abuzain
相关产品推荐
相关产品推荐

