Nest.js 中提供者的作用域有哪些?

· 约 3 分钟读完 · 第 43 / 144 章

推荐答案

在 Nest.js 中,提供者的作用域(Scope)决定了提供者实例的生命周期和共享方式。Nest.js 提供了三种作用域:

  1. DEFAULT:默认作用域,提供者实例在整个应用程序生命周期中共享。
  2. REQUEST:请求作用域,提供者实例在每个请求中创建,并在请求结束时销毁。
  3. TRANSIENT:瞬态作用域,提供者实例在每次注入时都会创建一个新的实例。

本题详细解读

DEFAULT 作用域

  • 特点:提供者实例在应用程序启动时创建,并在整个应用程序生命周期中共享。
  • 适用场景:适用于无状态的服务或需要全局共享的实例。
  • 示例:

REQUEST 作用域

  • 特点:提供者实例在每个请求中创建,并在请求结束时销毁。
  • 适用场景:适用于需要根据请求上下文动态创建实例的场景,如用户认证、请求日志记录等。
  • 示例:

TRANSIENT 作用域

  • 特点:提供者实例在每次注入时都会创建一个新的实例。
  • 适用场景:适用于需要每次注入时都创建新实例的场景,如某些需要隔离状态的服务。
  • 示例:

作用域的设置

  • 全局设置:可以在模块级别或提供者级别设置作用域。
  • 模块级别:
  • 提供者级别:

注意事项

  • 性能影响:REQUEST 和 TRANSIENT 作用域会增加实例创建和销毁的开销,需谨慎使用。
  • 依赖注入:作用域不同的提供者之间注入时,需确保作用域的一致性,避免潜在的错误。