当前位置: 首页> 娱乐> 明星 > 第四章 Nest provider

第四章 Nest provider

时间:2025/7/12 17:11:02来源:https://blog.csdn.net/weixin_49014702/article/details/139881822 浏览次数:0次


实现我们先创建一个nest 项目

nest new provider

在这里插入图片描述

1、provider的基础用法解释

首先我们打开一下项目下的文件(app.service.ts) 可以看到可以看到 AppService 是被 @Injectable 修饰的 class
1716708573247.png
接着我们打开 app.module.s 可以看到 Module 的 providers 里声明了 AppService,这就是provider 如下图
1716708920516.png
其实 AppService 是一种简写方式 完整的方式如下:
1716709023352.png
provide 指定 token
useClass 指定对象的类,Nest 会自动对它做实例化后用来注入
接着我们看 app.controller.ts 在这个文件里面 AppController 的构造器里参数里声明了 AppService 的依赖,就会自动注入 如下图

在这里插入图片描述


此处有两种注入方式:
构造器注入 也就是上图的

constructor(private readonly appService: AppService) {}

属性注入

@Inject(AppService)
private readonly appService: AppService

1716710328280.png
在 Model中我们还可以注入一些指定值例如

{provide: 'test',useValue: {name: '我是注入的',}}

使用 provide 指定 token,使用 useValue 指定值
1716712703263.png
接着我们可以在 app.controller.ts 中进行使用
1716712785552.png
接着我们打开 http://localhost:3000/
1716712929637.png
代表注入成功

2、providers 之 useFactory

此外 provider 的值可能是动态产生的 ,我们可以使用 useFactory 来动态创建一个对象,例如下面代码

{provide: 'test2',useFactory(test: { name: string }, appService: AppService) {return {name: test.name,desc: appService.getHello()}},inject: ['test', AppService]}

1716713510786.png
接着在 app.controller.ts 中进行使用
1716713478157.png
界面显示下图则为成功
1716713536653.png
说明provider 还可以调用别的 provider 以及可以调用 service

同时 useFactory 也支持异步

我们将代码改为 Nest 会等拿到异步方法的结果之后再注入

{provide: 'test2',async useFactory(test: { name: string }, appService: AppService) {await new Promise((resolve) => {setTimeout(resolve, 2000)})return {name: test.name,desc: appService.getHello()}},inject: ['test', AppService]}],
})

2、providers 之 useExisting

useExisting 是用来起别名的

将test3 改为test4
1716714271916.png
provider 是通过 @Injectable 声明,然后在 @Module 的 providers 数组里注册的 class。
默认的 provider 就是class 这样不用使用 @Inject 来指定注入的 token
但也可以用字符串类型的 token,不过注入的时候要用 @Inject 单独指定。
除了可以用 useClass 指定注入的 class,还可以用 useValue 直接指定注入的对象。
如果想动态生成对象,可以使用 useFactory,它的参数也注入 IOC 容器中的对象,然后动态返回 provider 的对象。
如果想起别名,可以用 useExisting 给已有的 token,指定一个新 token。

关键字:第四章 Nest provider

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: