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

推荐答案

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

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

本题详细解读

DEFAULT 作用域

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

REQUEST 作用域

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

TRANSIENT 作用域

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

作用域的设置

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

注意事项

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