当前位置: 首页 > news >正文

1.8 providers

  1. 生成providers

nest g service <name>
  1. providers的注入方式

构造函数注入

@Injectable()
export class KeywordService {constructor(private readonly httpService: HttpService,private readonly pro: ProService,) {}
}

@Inject()注入

export class KeywordController {@Inject()private readonly httpService: HttpService;@Inject()private readonly keywordService: KeywordService;
}
  1. providers注册

@Module({imports: [HttpModule.register({timeout: 5000,maxRedirects: 5,baseURL: 'http://localhost:3000',}),ProModule,],controllers: [KeywordController],providers: [KeywordService],
})
export class KeywordModule {}
  1. 创建providers

a. 使用@Injectable()注解

b. providers完整写法

在module中注册时,一般使用简写,下面是providers的完整写法

providers: [{provide: CatsService,useClass: CatsService,},
];

c. 值提供者/value providers

//mock.ts
export class Mock {getHello(): string {return 'hello world';}
}//pro.module.ts
@Module({providers: [{provide: ProService,useValue: new Mock(),},],exports: [ProService],
})//Mock类要和ProService类拥有同样的方法,即Mock和ProService都有一个getHello()方法,则nest在解析时,会用Mock的getHello()方法替换掉ProService的getHello()方法

d. 非类提供者/Non-class-based provider tokens

//pro.module.ts
import { Mock } from './mock';
@Module({providers: [{provide: 'connect',useValue: new Mock(),},],exports: ['connect'],
})
export class ProModule {}
//mock.ts
export class Mock {getHello(): string {return 'hello world';}
}//注入
import { Mock } from '../pro/mock';
@Controller('keyword')
export class KeywordController {
@Inject('connect')private readonly mock: Mock;
}

e. 类提供者/useClass

import { ProService } from './pro.service';
@Module({providers: [{provide: 'ProService',useClass: ProService,},],exports: ['ProService'],
})
export class ProModule {}

或者用三元操作符来判断,返回特定的提供者

import { Module } from '@nestjs/common';
import { ProService } from './pro.service';
import { FactoryService } from './factory.service';let a;@Module({providers: [{provide: 'CONNECTION',useClass: a ? ProService : FactoryService,},],exports: ['CONNECTION'],
})
export class ProModule {}

f. 工厂提供者/factory providers

import { Module } from '@nestjs/common';
import { FactoryService } from './factory.service';@Module({providers: [FactoryService, //必须引入,或者直接引入FactoryModule{provide: 'CONNECTION',useFactory: (fac: FactoryService) => {return String(fac.getHello());},inject: [FactoryService],},],exports: ['CONNECTION'],
})
export class ProModule {}

或者

@Module({imports: [FactoryModule],providers: [{provide: 'CONNECTION',useFactory: (fac: FactoryService) => {return String(fac.getHello());},inject: [FactoryService],},],exports: ['CONNECTION'],
})

或者

import { Module } from '@nestjs/common';
import { FactoryService } from './factory.service';
import { FactoryModule } from './factory.module';
const connectionFactory = {provide: 'CONNECTION',useFactory: (optionsProvider: FactoryService) => {const options = optionsProvider.getHello();return String(options);},inject: [FactoryService],
};@Module({imports: [FactoryModule],providers: [connectionFactory, FactoryService],exports: [connectionFactory],
})

或者直接提供值

import { Module } from '@nestjs/common';
import { FactoryService } from './factory.service';
import { FactoryModule } from './factory.module';
const config = {data: {a: 1,b: 2,},
};
const connectionFactory = {provide: 'CONNECTION',useFactory: () => config,
};@Module({imports: [FactoryModule],providers: [connectionFactory, FactoryService],exports: [connectionFactory],
})

g.别名提供者

import { Module } from '@nestjs/common';
import { FactoryService } from './factory.service';
import { FactoryModule } from './factory.module';const TestService = {provide: 'Test',useExisting: FactoryService,
};
//TestService和FactoryService是同一个提供者
@Module({imports: [FactoryModule],providers: [FactoryService, TestService],exports: [TestService, FactoryService],
})

h.导出提供者

//可以导出令牌,也可以导出整个对象
exports: [‘Test', FactoryService]

i. 异步提供者

//在实例化依赖于(注入)这样一个提供程序的任何类之前,Nest将等待承诺的解决
{provide: 'ASYNC_CONNECTION',useFactory: async () => {const connection = await createConnection(options);return connection;},
}

相关文章:

1.8 providers

生成providersnest g service <name>providers的注入方式构造函数注入Injectable() export class KeywordService {constructor(private readonly httpService: HttpService,private readonly pro: ProService,) {} }Inject()注入export class KeywordController {Inject…...

如何编写一个基本的 Verilog Module(模块)

1、概述这篇文章主要介绍了 Verilog 在 FPGA 设计中的概念和使用方法。首先讨论使用模块&#xff08;module&#xff09;关键字构造 Verilog 设计的方式&#xff0c;以及这与所描述的硬件的关系。这包括对参数、端口&#xff08;port&#xff09;和例化&#xff08;instantiato…...

让乔布斯想要「发动核战争」的 Android,为何成了占有率最高的系统?

2008 年 9 月 23 日&#xff0c;Apple 的创始人和 CEO 史蒂夫乔布斯像往常一样走进了公司&#xff0c;此时距离初代 iPhone 的发布会才过了一年半&#xff0c;这款充满了争议的产品就像一块从山崖滚落的巨岩&#xff0c;一路电光石火的给手机市场的《小石潭记》来了场焚书坑儒。…...

FPGA开发软件(vivado + modelsim)环境搭建(附详细安装步骤+软件下载)

本文详细介绍了vivado软件和modelsim软件的安装&#xff0c;以及vivado中配置modelsim仿真设置&#xff0c;每一步都加文字说明和图片。一、软件安装包下载1、vivado vivado版本很多&#xff0c;目前最新的已更新到vivado2022.2&#xff0c;版本越高&#xff0c;安装包越大&…...

TypeScript 学习之类型

布尔类型 类型: boolean最简单的类型&#xff0c;值只有 true/false let isDone: boolean true;数字类型 类型&#xff1a;number数字都是浮点数&#xff0c;支持二进制、八进制、十进制、十六进制。 let decLiteral: number 16; // 十进制 let hexLiteral: number 0xf0…...

基于MATLAB计算MIMO信道容量(附完整代码与分析)

目录 一.介绍 二. 代码 三. 运行结果及分析 3.1 MIMO信道容量&#xff1a;固定发射天线数为4 3.2 MIMO信道容量&#xff1a;固定接收天线数为4 3.3 AWGN信道与瑞利信道容量 四. 总结 一.介绍 本文章将在MATLAB环境中分析MIMO信道容量&#xff0c;AWGN信道容量&#xf…...

CSDN城市开发者联盟、C友会期待你的加入

文章目录&#x1f31f; 课前小差&#x1f31f; chatGPT&#x1f31f; CSDN中的持续学习&#x1f31f; 23年原力计划&#x1f31f; C友会、CDC&#x1f31f; 如何关联本地的开发者&#xff1f;&#x1f31f; 写在最后&#x1f31f; 课前小差 哈喽&#xff0c;大家好&#xff0c…...

【新2023】华为OD机试 - 吃火锅(Python)

华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 吃火锅 题目 入职后,导师会请你吃饭,你选择了火锅, 火锅里会在不同时间下很多菜, 不同食材要煮不同时间,才能变得刚好合适, 你希望吃到最多的刚好合适的菜, 但是你的手速不够快用m代替手速, 每次…...

类似LeetCode的登录页面(小程序版)

前言每一个项目都会有用户端的注册和登录页面&#xff0c;对于刚入门的小白来说&#xff0c;在UI设计方面不太擅长&#xff0c;就算大致的UI界面设计出来了&#xff0c;但是落实到代码上来实现的时候就很容易卡住。这篇博客主要介绍的就是仿作一个类似LeetCode登录的简约大方页…...

CUDA的统一内存

CUDA的统一内存 文章目录CUDA的统一内存N.1. Unified Memory IntroductionN.1.1. System RequirementsN.1.2. Simplifying GPU ProgrammingN.1.3. Data Migration and CoherencyN.1.4. GPU Memory OversubscriptionN.1.5. Multi-GPUN.1.6. System AllocatorN.1.7. Hardware Coh…...

MySQL-其他函数(补充)

格式化函数FORMAT(x, n) 例&#xff1a;将数字x进行格式化&#xff0c;以四舍五入的方式保留n位小数&#xff0c;结果以字符串的形式返回mysql> select format(12.3456,3),format(2.2,4),format(9.333,0); --------------------------------------------------- | format(12…...

MySQL Study Notes Design in 2023

文章目录1 概述1.1 MySQL相关概述1.2 数据模型1.3 SQL分类2 数据库设计-DDL2.1 约束2.2 字段3 数据库操作-DML3.1 增加(insert)1 概述 1.1 MySQL相关概述 数据库&#xff1a;英文为 DataBase&#xff0c;简称DB&#xff0c;它是存储和管理数据的仓库。 数据库管理系统&#xf…...

C++ 修改防火墙firewall设置(Windows)

文章目录1、简介1.1 防火墙概述1.2 入站&#xff0c;还是出站&#xff1f;1.3 防火墙规则优先级2、系统界面方式3、命令行方式3.1 防火墙基本状态设置3.2 入站出站规则设置3.3 其他设置3.4 telnet检测端口4、C方式4.1 注册表4.2 COM&#xff08;Windows XP&#xff09;4.3 COM&…...

Spring 入门教程详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

day43【代码随想录】动态规划之一和零、完全背包理论基础

文章目录前言一、一和零&#xff08;力扣474&#xff09;二、完全背包前言 1、一和零 2、完全背包理论基础 一、一和零&#xff08;力扣474&#xff09; 求装满这个背包最多有多少个物品 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集…...

GEE学习笔记 七十八:干涸的洪泽湖

今天看了一篇报道直击60年一遇气象干旱&#xff1a;洪泽湖缩小近一半&#xff0c;鱼蟹受灾严重&#xff01;_新华报业网&#xff08;直击60年一遇气象干旱&#xff1a;洪泽湖缩小近一半&#xff0c;鱼蟹受灾严重&#xff01;&#xff09;&#xff0c;既然玩GEE那就要玩出点花样…...

双指针【灵神基础精讲】

来源0x3f&#xff1a;https://space.bilibili.com/206214 文章目录同向双指针[209. 长度最小的子数组](https://leetcode.cn/problems/minimum-size-subarray-sum/)[713. 乘积小于 K 的子数组](https://leetcode.cn/problems/subarray-product-less-than-k/)[3. 无重复字符的最…...

tushare量化数据库模块怎么分析?

tushare量化数据其实包含的数据库有些是需要收费的&#xff0c;也有些会免费提供&#xff0c;不过tushare量化数据库整个库就很大很大&#xff0c;涉及的范围也广&#xff0c;挖掘这些数据还得从量化股票接口说起&#xff0c;就比如说在股票量化领域&#xff0c;tushare量化数据…...

模型转换 PyTorch转ONNX 入门

前言 本文主要介绍如何将PyTorch模型转换为ONNX模型&#xff0c;为后面的模型部署做准备。转换后的xxx.onnx模型&#xff0c;进行加载和测试。最后介绍使用Netron&#xff0c;可视化ONNX模型&#xff0c;看一下网络结构&#xff1b;查看使用了那些算子&#xff0c;以便开发部署…...

【深度学习】激活函数

上一章——认识神经网络 新课P54介绍了强人工智能概念&#xff0c;P55到P58解读了矩阵乘法在代码中的应用&#xff0c;P59&#xff0c;P60介绍了在Tensflow中实现神经网络的代码及细节&#xff0c;详细的内容可以自行观看2022吴恩达机器学习Deeplearning.ai课程&#xff0c;专…...

告别虚拟机!Windows WSL2+GNU Radio玩转HackRF-One无线接收(避坑指南)

告别虚拟机&#xff01;Windows WSL2GNU Radio玩转HackRF-One无线接收&#xff08;避坑指南&#xff09; 在软件定义无线电&#xff08;SDR&#xff09;领域&#xff0c;HackRF-One因其开源设计和亲民价格成为入门首选。然而传统虚拟机方案常因性能损耗、驱动兼容性问题让新手望…...

pybind11进阶指南:如何高效封装C++类供Python调用(附常见问题解决方案)

pybind11进阶指南&#xff1a;如何高效封装C类供Python调用&#xff08;附常见问题解决方案&#xff09; 在当今高性能计算和科学计算领域&#xff0c;C与Python的结合已成为开发者工具箱中不可或缺的组合。C提供底层性能优势&#xff0c;而Python则以其简洁语法和丰富生态著称…...

从零开始:在Unity中完美实现视频播放功能的完整指南(附常见报错解决方案)

从零开始&#xff1a;在Unity中完美实现视频播放功能的完整指南&#xff08;附常见报错解决方案&#xff09; 在游戏开发中&#xff0c;视频播放功能的应用场景越来越广泛——从开场动画、过场剧情到UI背景&#xff0c;视频元素能为玩家带来更丰富的视听体验。Unity作为主流的…...

腾讯文档协作全攻略:从权限设置到区域锁定,团队办公效率翻倍

腾讯文档团队协作高阶指南&#xff1a;权限控制与区域锁定的艺术 在数字化办公时代&#xff0c;团队协作的效率往往决定了项目的成败。作为国内领先的在线协作文档工具&#xff0c;腾讯文档凭借其流畅的实时协作体验和丰富的权限管理功能&#xff0c;已经成为众多团队的首选工具…...

Open UI5 源代码解析之736:CardBase.js

源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.f\src\sap\f\CardBase.js CardBase.js 深度解析:在 OpenUI5 中承上启下的卡片基座 文件定位与整体判断 CardBase.js 位于 sap.f 库下,它不是面向业务开发者直接频繁实例化的组件,而是一个被多种卡片实…...

Qwen3-TTS作品分享:听AI朗读你的日记、诗歌和故事

Qwen3-TTS作品分享&#xff1a;听AI朗读你的日记、诗歌和故事 1. 为什么你需要一个会"读心"的语音合成工具 想象一下这样的场景&#xff1a;深夜写完日记&#xff0c;点击播放键&#xff0c;听到一个温暖的声音将你的文字娓娓道来&#xff1b;创作完一首诗&#xf…...

5分钟搞定AutoHotkey脚本转EXE:Ahk2Exe终极编译指南

5分钟搞定AutoHotkey脚本转EXE&#xff1a;Ahk2Exe终极编译指南 【免费下载链接】Ahk2Exe Official AutoHotkey script compiler - written itself in AutoHotkey 项目地址: https://gitcode.com/gh_mirrors/ah/Ahk2Exe 想要将AutoHotkey脚本快速转换为独立的可执行文件…...

实验室搬砖实录:手把手教你搞定柱层析,从TLC监测到梯度洗脱的保姆级避坑指南

实验室搬砖实录&#xff1a;手把手教你搞定柱层析&#xff0c;从TLC监测到梯度洗脱的保姆级避坑指南 记得第一次独立做柱层析时&#xff0c;盯着那根玻璃柱看了半小时&#xff0c;愣是没敢动手。TLC板上明明分得挺开的点&#xff0c;怎么一上柱子就全乱了&#xff1f;洗脱液极性…...

EasyAnimateV5-7b-zh-InP一键部署教程:基于Linux系统的快速安装指南

EasyAnimateV5-7b-zh-InP一键部署教程&#xff1a;基于Linux系统的快速安装指南 1. 引言 想快速在Linux系统上部署一个强大的视频生成模型吗&#xff1f;EasyAnimateV5-7b-zh-InP是一个22GB的图生视频模型&#xff0c;支持多分辨率视频生成&#xff0c;还能用中英文双语进行预…...

USB251xB集线器I²C控制库:嵌入式USB设备扩展实战指南

1. 项目概述SparkFun USB Hub Qwiic USB251x 是一款面向嵌入式原型开发与量产过渡阶段的轻量级 USB 2.0 集线器控制库&#xff0c;专为 SparkFun 自研的 Qwiic 兼容 USB251xB 系列 Hub 模块&#xff08;SPX-18014&#xff09;设计。该库并非通用 USB 协议栈&#xff0c;而是聚焦…...