梗概

在NestJS的微服务中,scope 主要用于控制服务的生命周期和作用范围。NestJS 提供三种不同的作用域选项:DEFAULTTRANSIENTREQUEST

  1. DEFAULT(默认)
    • 默认情况下,服务是单例的。意味着在整个应用程序生命周期内,NestJS 只会创建一个实例,并在应用程序的不同部分共享这个实例。
    • 适用于不需要频繁创建和销毁的服务。
  2. TRANSIENT(瞬态)
    • 瞬态服务在每次注入时都会创建一个新的实例。
    • 适用于需要在每次使用时创建新的实例的场景,比如某些短生命周期的对象。
  3. REQUEST(请求)
    • 请求作用域服务在每个请求期间创建一个新的实例,并在该请求处理完毕后销毁。
    • 适用于需要在每个请求中保持独立状态的服务,通常在处理 HTTP 请求时很有用。

实例

使用示例如下:

import { Injectable, Scope } from '@nestjs/common';
@Injectable({ scope: Scope.REQUEST })
export class MyRequestScopedService {
  // Service implementation
}
@Injectable({ scope: Scope.TRANSIENT })
export class MyTransientService {
  // Service implementation
}

通过指定 scope,可以更好地控制服务实例的生命周期和行为,满足不同的应用需求。