返回

NestJS 的基石:深入解析 Provider

前端

前言

NestJS 是一款构建在 Express 和 TypeScript 之上的渐进式 Node.js 框架。它以其优雅的语法和对依赖注入 (DI) 的强大支持而闻名。Provider 是 NestJS DI 系统的核心,理解它对于充分利用框架至关重要。

什么是 Provider?

Provider 只是用 @Injectable() 装饰器注释的类。它定义了应用程序中可用的服务或实例。Provider 可以是单例的,这意味着它们在应用程序生命周期中只会实例化一次,也可以是瞬态的,这意味着它们每次请求都会实例化一个新实例。

类型

NestJS 提供了三种类型的 Provider:

  1. 私有 :仅在声明它的模块中可用的 Provider。
  2. 只读 :只能从提供它的模块中注入,但在其他模块中可见。
  3. 公共 :在整个应用程序中可用。

作用域

作用域定义了 Provider 的生存期。NestJS 提供了以下作用域:

  1. 全局 :在整个应用程序中可用。
  2. 请求 :仅在当前 HTTP 请求的生命周期中可用。
  3. 模块 :仅在声明它的模块中可用。

装饰器

@Injectable() 装饰器用于标记 Provider。它接受以下选项:

  • scope :定义 Provider 的作用域。
  • providedIn :指定 Provider 提供给哪些模块。

用法

要使用 Provider,请首先使用 @Injectable() 装饰器标记类:

@Injectable()
class MyService {}

然后,在需要的地方注入它:

constructor(private myService: MyService) {}

案例

以下代码演示了如何创建私有只读 Provider:

@Injectable({
  scope: Scope.MODULE,
  providedIn: 'root',
})
export class MyService {}

此 Provider 仅在根模块中可用,并且只能从声明它的模块中注入。

总结

Provider 是 NestJS 中理解依赖注入的关键概念。通过了解不同的类型、作用域和装饰器,开发者可以充分利用 NestJS 的强大功能,创建可扩展、可维护的应用程序。