请求范围服务

Nic*_*icu 4 javascript node.js typescript nestjs

根据我现在的理解,nestjs 会在应用程序启动时创建所有服务,也许我用错了有没有办法配置 NestJs 以根据请求创建服务?就像每次完成请求时都会重新创建用于该请求的一些服务?

Kim*_*ern 5

随着 nest.js 6.0 的发布,添加了注入范围。有了这个,您可以为您的提供者选择以下三个范围之一:

  • SINGLETON:默认行为。您的提供程序的一个实例用于整个应用程序
  • TRANSIENT:为每个注入它的提供者创建一个专用的提供者实例。
  • REQUEST:对于每个请求,都会创建一个新的提供者。

?? 注意:注入范围将在您的依赖链中冒泡。??

示例:如果UsersController(单范围)喷射UsersService(单范围)内喷射OtherService(请求范围),则两个UsersControllerUsersService将自动成为请求范围。

用法

要么将其添加到@Injectable()装饰器:

@Injectable({ scope: Scope.REQUEST })
export class UsersService {}
Run Code Online (Sandbox Code Playgroud)

或者在你的模块定义中为自定义提供者设置它:

{
  provide: 'CACHE_MANAGER',
  useClass: CacheManager,
  scope: Scope.TRANSIENT,
}
Run Code Online (Sandbox Code Playgroud)