2022年8月3日

nestJs-提供者(Provider)

作者 rourou

服务

Provider 只是一个用 @Injectable() 装饰器注释的类

Providers 是纯粹的 JavaScript 类,在其类声明之前带有 @Injectable()装饰器。

服务将负责数据存储和检索

作用域

与应用程序的生命周期同步,在启动时实例化每个提供程序。关闭时,销毁Provider。可以自定义提供者修改生命周期请求范围

可选提供者

指定可选provider。在constructor 的参数中使用 @Optional() 装饰器。解决一些依赖关系。(如类可能依赖于一个配置对象,但如果没有传递,则应使用默认值)

import { Injectable, Optional, Inject } from '@nestjs/common';
@Injectable()
export class HttpService<T> {
  constructor(
    @Optional() @Inject('HTTP_OPTIONS') private readonly httpClient: T
  ) {}
}

基于属性的注入

如果顶级类依赖于一个或多个 providers,那么需要通过从构造函数中调用子类中的 super() 来传递。解决类似的问题,可以通过@Inject() 来注入

import { Injectable, Inject } from '@nestjs/common';
@Injectable()
export class HttpService<T> {
  @Inject('HTTP_OPTIONS')
  private readonly httpClient: T;
}

注册提供者

在.module.中使用@Module()装饰器将定义的提供者注册入providers数组中