2022年8月3日
nestJs-提供者(Provider)
服务
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数组中