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

nestjs之provider的provide取值的几种方式

以下是根据上述每种 provide 取值方式的例子,展示在 NestJS 中如何定义和使用自定义 providers。

1. 字符串

在这个例子中,我们将使用字符串 'MY_SERVICE' 作为 provider 的标识符。

首先,定义 provider:

import { Injectable } from '@nestjs/common';@Injectable()
export class MyService {doSomething() {return 'Doing something!';}
}// 在模块中注册 provider
import { Module } from '@nestjs/common';@Module({providers: [{provide: 'MY_SERVICE',useClass: MyService,},],
})
export class MyModule {}

接着,在其他部分的应用中注入这个 provider:

import { Injectable, Inject } from '@nestjs/common';@Injectable()
export class SomeOtherService {constructor(@Inject('MY_SERVICE') private myService: MyService) {}someMethod() {return this.myService.doSomething();}
}

2. 符号(Symbol)

在这个例子中,我们将使用 Symbol 作为 provider 的唯一标识符。

首先,创建一个 Symbol

export const MY_SERVICE_TOKEN = Symbol('MyService');

然后定义 provider:

import { Injectable } from '@nestjs/common';@Injectable()
export class MyService {doSomething() {return 'Doing something!';}
}// 在模块中注册 provider
import { Module } from '@nestjs/common';
import { MY_SERVICE_TOKEN } from './constants';@Module({providers: [{provide: MY_SERVICE_TOKEN,useClass: MyService,},],
})
export class MyModule {}

在其他部分的应用中注入这个 provider:

import { Injectable, Inject } from '@nestjs/common';
import { MY_SERVICE_TOKEN } from './constants';@Injectable()
export class SomeOtherService {constructor(@Inject(MY_SERVICE_TOKEN) private myService: MyService) {}someMethod() {return this.myService.doSomething();}
}

3. 类型(Class)

在这个例子中,我们将直接使用一个类 MyService 作为 provide 的值。

定义 provider:

import { Injectable } from '@nestjs/common';@Injectable()
export class MyService {doSomething() {return 'Doing something!';}
}// 在模块中注册 provider
import { Module } from '@nestjs/common';@Module({providers: [MyService],
})
export class MyModule {}

在其他部分的应用中注入这个 provider:

import { Injectable } from '@nestjs/common';@Injectable()
export class SomeOtherService {constructor(private myService: MyService) {}someMethod() {return this.myService.doSomething();}
}

4. 已存在的 Provider

在这个例子中,我们将创建一个 provider,并将其映射到已存在的另一个 provider。

定义原始 provider:

import { Injectable } from '@nestjs/common';@Injectable()
export class MyService {doSomething() {return 'Doing something!';}
}// 在模块中注册 provider
import { Module } from '@nestjs/common';@Module({providers: [MyService],
})
export class MyModule {}

然后创建一个映射到 MyService 的新 provider:

import { Module } from '@nestjs/common';@Module({providers: [{provide: 'ALIAS_FOR_MY_SERVICE',useExisting: MyService,},],
})
export class AliasModule {}

在其他部分的应用中注入这个新 provider:

import { Injectable, Inject } from '@nestjs/common';@Injectable()
export class SomeOtherService {constructor(@Inject('ALIAS_FOR_MY_SERVICE') private myService: MyService) {}someMethod() {return this.myService.doSomething();}
}

在每个例子中,我们演示了如何根据不同的 provide 取值方式定义和使用 NestJS 中的自定义 provider。

相关文章:

  • 设计模式篇章(4)——十一种行为型模式
  • Unity之射线检测
  • 【河海大学论文LaTeX+VSCode全指南】
  • axios封装-reques.js
  • 给WordPress网站增加一个带时间的led广告牌
  • Kafka-消费者-KafkaConsumer分析-PartitionAssignor
  • 如何手写一个RPC?
  • rust跟我学三:文件时间属性获得方法
  • MySQL三大日志
  • 编写RedisUtil来操作Redis
  • Java中的finally字句
  • 006.Oracle事务处理
  • python爬虫如何写,有哪些成功爬取的案例
  • pytest -- 进阶使用详解
  • iproute 随手记
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • android 一些 utils
  • Docker入门(二) - Dockerfile
  • JavaScript中的对象个人分享
  • Java读取Properties文件的六种方法
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • JS实现简单的MVC模式开发小游戏
  • Linux gpio口使用方法
  • markdown编辑器简评
  • maven工程打包jar以及java jar命令的classpath使用
  • mysql中InnoDB引擎中页的概念
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Node + FFmpeg 实现Canvas动画导出视频
  • node和express搭建代理服务器(源码)
  • Protobuf3语言指南
  • 简单基于spring的redis配置(单机和集群模式)
  • 深度学习在携程攻略社区的应用
  • 深入浅出Node.js
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 项目管理碎碎念系列之一:干系人管理
  • 学习笔记TF060:图像语音结合,看图说话
  • #Java第九次作业--输入输出流和文件操作
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (175)FPGA门控时钟技术
  • (Python) SOAP Web Service (HTTP POST)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (二)WCF的Binding模型
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (六)激光线扫描-三维重建
  • (六)软件测试分工
  • (十)c52学习之旅-定时器实验
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)视频码率,帧率和分辨率的联系与区别
  • ***原理与防范
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .Net 8.0 新的变化
  • .net core控制台应用程序初识
  • .Net 知识杂记