1.Provides
Providers 是 Nest 的一个基本概念。许多基本的 Nest 类可能被视为 provider - service, repository, factory, helper 等等。 他们都可以通过 constructor 注入依赖关系。 这意味着对象可以彼此创建各种关系,并且“连接”对象实例的功能在很大程度上可以委托给 Nest运行时系统。 Provider 只是一个用 @Injectable() 装饰器注释的类。简单点来说在开发中通常一个类调用另一个类,它们之间就会产生依赖关系,当类越来越多时这种依赖关系非常不好管理,而Nest正是基于IOC的思想将对象注入到IOC容器中,通过IOC容器来帮我们管理对象的之间的依赖关系,我们在需要使用时注入要使用的对象即可,Nest支持构造函数注入和字段注入两种注入方式。
//app.service.ts
import { Injectable } from '@nestjs/common';
@Injectable() //将AppService注入到Nest IOC容器
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
//通过构造方法注入依赖,此时你可以使用appService中的方法
constructor(private readonly appService: AppService) {}
@Get('/hello')
getHello(): string {
return this.appService.getHello();
}
}
1.1 Providers 作用域
1.2 可选的Providers
在一个类中注入Provides时,如果没有传递Provides则会导致错误,此时我们为注入的Providers提供一个默认值,可以通过@Optional()注解表示Provides是可选的。
import { Injectable, Optional, Inject } from '@nestjs/common';
@Injectable()
export class HttpService<T> {
constructor(
//使用@Optional()装饰器表示 httpClient是可选的,@Inject()装饰器可以根据Providers关联的token注入对应的Providers
@Optional() @Inject('HTTP_OPTIONS') private readonly httpClient: T
) {}
}