Nest.js - Providers

2020-07-10  本文已影响0人  stevekeol

参考文档

controllers处理 HTTP 请求并将更复杂的任务委托给providers.

1. 服务
//cats.controller.ts
import { Controller, Get, Post, Body } from '@nestjs/common';
import { CreateCatDto } from './dto/create-cat.dto';
import { CatsService } from './cats.service';
import { Cat } from './interfaces/cat.interface';

@Controller('cats')
export class CatsController {
  //CatsService 是通过类构造函数注入的.
  constructor(private catsService: CatsService) {}

  @Post()
  async create(@Body() createCatDto: CreateCatDto) {
    this.catsService.create(createCatDto);
  }

  @Get()
  async findAll(): Promise<Cat[]> {
    return this.catsService.findAll();
  }
}
//interfaces/cat.interface.ts
export interface Cat {
  name: string;
  age: number;
  breed: string;
}
// cats.service.ts : 负责数据存储和检索
import { Injectable } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';

//Nest通过@Injectable()知道CatsService是一个装饰器.
@Injectable()
export class CatsService {
  private readonly cats: Cat[] = [];

  create(cat: Cat) {
    this.cats.push(cat);
  }

  findAll(): Cat[] {
    return this.cats;
  }
}
//用CLI创建服务类
$ nest g service cats
2. 依赖注入

参考文章
Nest是建立在强大的设计模式,通常称为依赖注入.

constructor(private readonly catsService: CatsService) {}
3. 作用域 ---???

Provider通常具有和应用程序生命周期相同的的生命周期('作用域'):应用程序启动时,必须解析依赖项,因此必须实例化每个Provider。当应用程序关闭时,每个Provider都将被销毁。但有方法可以改变Provider的生命周期,参考

4. 自定义Provider ---?

Nest有一个内置的控制反转("IOC")容器,可以解决Providers之间的关系。参考

5. 默认Provider --- ?
import { Injectable, Optional, Inject } from '@nestjs/common';

@Injectable()
export class HttpService<T> {
  constructor(
    @Optional() @Inject('HTTP_OPTIONS') private readonly httpClient: T
  ) {}
}
6. 基于属性的注入 - 略
7. 手动实例化 - 略
上一篇下一篇

猜你喜欢

热点阅读