使用多种provider注入对象

前言


😈我们从面一些文章的学习可以发现Nest的有很明显的架构特征,因为Nest实现了IOC所以当我们想使用某个对象的时候直接注入就好了,其实在Nest中有多种provider的方式可以非常灵活的注入对象。

一.常见的注入方式


🐻我们对Nest的常见注入方式已经非常的熟悉,在Nest中一般通过这种方式进行注入,比如如下的services我们会使用类装饰器来对这个类进行修饰。

然后在module中引入通过provider来进行注入,这种是我们最常用的注入方式,然后在controller中就能够正常使用它的对象了。

二.实际的注入方式


🤡其实上边的注入方式仅仅是一种"简写"而实际的注入方式的写法是下边这种,通过provide提供令牌,使用useClass来指定对应的类,这样在controller依然可以正常使用。

这里的token是Appservice本身,其实token也可以是一个字符串比如'app_service'只不过在controller中使用就要通过这种方式。

然后我们将鼠标箭头放在如下就可以看到appService已经加载到了,说明已经被正确注入了,可以看出来相对来讲直接使用class来做token更加方便也会避免很多问题。

三.注入自定义的值


😎我们可以看到我们上面注入的是一个类,然后在controller中可以使用对应的对象,当然我们也可以注入一个单纯的值,如下:

然后我们在controller中是使用下这个注入的值

我们访问local:3000这个路径就会获取到对应的数据

😀当然这个值还可以是一个工厂函数创建出来的比如使用如下这种方式

然后和之前其他的使用方式一样在controller层使用一下然后访问下localhost:3000就可以在控制台看到输出的结果了。

🫥不仅如此我们还可以通过参数注入其他的provider,使用如下这种方式:

然后使用方式也是直接在controller中通过Inject的方式使用,依然可以获取到注入的内容。

四.useFactory异步provider


🤡我们使用工厂函数返回的方式不仅仅可以返回数据,通过参数注入其他的值,还可以通过异步的方式返回

然后在controller中使用,会在加载完毕后在控制台中打印出来。

除了以上所有的功能外我们还可以使用useExisting指定别名,相当于给原有的person3指定了一个别名叫做ssss然后就可以在controller中使用ssss,输出的内容就是原来person3的内容。

五.总结


😈Nset中可以灵活的进行对象的注入,甚至还可以使用工厂函数异步注入,设置别名等等,不同方式的注入在开发中会大量使用,无论是源码中还是实际项目开发中灵活的注入方式会解决很多的问题,学会使用多种方式灵活的注入非常重要~

相关推荐
zb200641206 分钟前
SpringBoot详解
java·spring boot·后端
AI人工智能+电脑小能手35 分钟前
【大白话说Java面试题】【Java基础篇】第7题:HashMap的get流程是什么
java·后端·面试·哈希算法·散列表·hash-index·hash
霸道流氓气质2 小时前
SpringBoot+LangChain4j+Ollama+RAG(检索增强生成)实现私有文档向量化检索回答
java·spring boot·后端
MiNG MENS2 小时前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
IT_陈寒2 小时前
Vite静态资源加载把我坑惨了
前端·人工智能·后端
2601_949814692 小时前
Spring Boot中的404错误:原因、影响及处理策略
java·spring boot·后端
RDCJM2 小时前
Spring Boot spring.factories文件详细说明
spring boot·后端·spring
小码哥_常2 小时前
从ORDER BY RAND()踩坑,看透SQL性能优化
后端
remember_me2 小时前
LangGraph 使用指南
后端
ILYT NCTR2 小时前
搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
开发语言·后端·golang