返回
NestJS 的基石:深入解析 Provider
前端
2024-02-06 22:24:55
前言
NestJS 是一款构建在 Express 和 TypeScript 之上的渐进式 Node.js 框架。它以其优雅的语法和对依赖注入 (DI) 的强大支持而闻名。Provider 是 NestJS DI 系统的核心,理解它对于充分利用框架至关重要。
什么是 Provider?
Provider 只是用 @Injectable()
装饰器注释的类。它定义了应用程序中可用的服务或实例。Provider 可以是单例的,这意味着它们在应用程序生命周期中只会实例化一次,也可以是瞬态的,这意味着它们每次请求都会实例化一个新实例。
类型
NestJS 提供了三种类型的 Provider:
- 私有 :仅在声明它的模块中可用的 Provider。
- 只读 :只能从提供它的模块中注入,但在其他模块中可见。
- 公共 :在整个应用程序中可用。
作用域
作用域定义了 Provider 的生存期。NestJS 提供了以下作用域:
- 全局 :在整个应用程序中可用。
- 请求 :仅在当前 HTTP 请求的生命周期中可用。
- 模块 :仅在声明它的模块中可用。
装饰器
@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 的强大功能,创建可扩展、可维护的应用程序。