美文网首页
Nest.js - Providers

Nest.js - Providers

作者: stevekeol | 来源:发表于2020-07-10 09:02 被阅读0次

参考文档

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

  • Provider 只是一个用 @Injectable() 装饰器注释的类
  • 对象可以彼此创建各种关系,并且“连接”对象实例的功能在很大程度上可以委托给 Nest运行时系统
  • Providers 是纯粹的 JavaScript 类,在其类声明之前带有 @Injectable()装饰器
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
  • server.ts中通过@Injectable()告诉Nest该类是一个Provier;
  • controller.ts中通过@Controller()告诉Nest该类是一个Controller;
  • controller.ts中类CatsController中的CatsService是通过类构造函数注入的,因此可以this.catsService使用;
2. 依赖注入

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

  • 依赖,是当类需要执行其功能时,所需要的服务或对象。 DI 是一种编码模式,其中的类会从外部源中请求获取依赖,而不是自己创建它们。
  • 我们创建的类提供了一个服务,@Injectable() 装饰器把它标记为可供注入的服务; 该注入器负责创建服务实例,并把它们注入到controller的类中。
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. 手动实例化 - 略

相关文章

  • Nest.js - Providers

    参考文档 controllers处理 HTTP 请求并将更复杂的任务委托给providers. Provider ...

  • Nest.js学习之路(6)-Providers & D

    Controller负责处理Request及产生Response,数据库存取或是业务逻辑(business log...

  • 1、Nest.js 项目搭建

    Nest.js 5.0 系列教程。 什么是Nest.js? Nest.js 是 Node.js 平台下,兼容 Ty...

  • Nest.js 项目搭建

    Nest.js 5.0 系列教程。 什么是Nest.js? Nest.js 是 Node.js 平台下,兼容 Ty...

  • Nest(四):Providers

    译自:https://docs.nestjs.com/providers。 Providers是Nest中的一个基...

  • Content Providers

    这是我对官方文档的一个渣翻译,兼我的学习笔记,原文在此。 Content providers 内容提供器可以帮助应...

  • nest Providers

    提供程序是Nest的基本概念。 许多基本的Nest类都可以被视为提供程序-服务,存储库,工厂,帮助程序等。 提供程...

  • 三、Providers

    说明 Providers 在nest内是服务或者功能的提供则,nest内很多类都通过privider实现,如ser...

  • REST 请求处理

    一.Providers 详解 javax.ws.rs.ext.Providers 是JAX-RS 2.0定义的一种...

  • Nest.js学习之路(1)-开发环境准备

    1. 前言 本Nest.js学习之路,为完整的Nest.js开发入门教程系列,学完,保证能入门,上手开发。 当然前...

网友评论

      本文标题:Nest.js - Providers

      本文链接:https://www.haomeiwen.com/subject/ikaccktx.html