无题
匡思进Providers
Providers 是 Nest 的一个基本概念。许多基本的 Nest 类可能被视为 provider - service, repository, factory, helper 等等。 他们都可以通过 constructor 注入依赖关系。 这意味着对象可以彼此创建各种关系,并且“连接”对象实例的功能在很大程度上可以委托给 Nest运行时系统。 Provider 只是一个用 @Injectable() 装饰器注释的类。
1.基本用法
module 引入 service 在 providers 注入
![[83a5e31c147e948fb66375779a62a2d2_MD5.png]]
在Controller 就可以使用注入好的service 了
![[e52244a25ef5b4ce4bbc5a139984879b_MD5.png]]
2.service 第二种用法(自定义名称)
第一种用法就是一个语法糖
其实他的全称是这样的
1 2 3 4 5 6 7 8 9 10 11 12
| import { Module } from '@nestjs/common'; import { UserService } from './user.service'; import { UserController } from './user.controller'; @Module({ controllers: [UserController], providers: [{ provide: "Xiaoman", useClass: UserService }] }) export class UserModule { }
|
![[4f86c6723fdba14ce2424761db1f649b_MD5.png]]
自定义名称之后 需要用对应的Inject 取 不然会找不到的
![[f6a3299f0b14c229fb587fbf088c1f38_MD5.png]]
3.自定义注入值
通过 useValue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import { Module } from '@nestjs/common'; import { UserService } from './user.service'; import { UserController } from './user.controller'; @Module({ controllers: [UserController], providers: [{ provide: "Xiaoman", useClass: UserService }, { provide: "JD", useValue: ['TB', 'PDD', 'JD'] }] }) export class UserModule { }
|
![[4bc475e74c5aaf82d89ed5a406460289_MD5.png]]
![[dac34766da810638b7497aa7f099d712_MD5.png]]
3.工厂模式
如果服务 之间有相互的依赖 或者逻辑处理 可以使用 useFactory
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import { Module } from '@nestjs/common'; import { UserService } from './user.service'; import { UserService2 } from './user.service2'; import { UserService3 } from './user.service3'; import { UserController } from './user.controller'; @Module({ controllers: [UserController], providers: [{ provide: "Xiaoman", useClass: UserService }, { provide: "JD", useValue: ['TB', 'PDD', 'JD'] }, UserService2, { provide: "Test", inject: [UserService2], useFactory(UserService2: UserService2) { return new UserService3(UserService2) } } ] }) export class UserModule { }
|
![[1bd52299dffb7e573dcfd07d9585d088_MD5.png]]
![[f3900e8396e3d91a11e4cf036a987b38_MD5.png]]
4.异步模式
useFactory 返回一个promise 或者其他异步操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| import { Module } from '@nestjs/common'; import { UserService } from './user.service'; import { UserService2 } from './user.service2'; import { UserService3 } from './user.service3'; import { UserController } from './user.controller'; @Module({ controllers: [UserController], providers: [{ provide: "Xiaoman", useClass: UserService }, { provide: "JD", useValue: ['TB', 'PDD', 'JD'] }, UserService2, { provide: "Test", inject: [UserService2], useFactory(UserService2: UserService2) { return new UserService3(UserService2) } }, { provide: "sync", async useFactory() { return await new Promise((r) => { setTimeout(() => { r('sync') }, 3000) }) } } ] }) export class UserModule { }
|
![[e01b45f6e13125689a92d0e5bbea309d_MD5.png]]
本文转自 https://xiaoman.blog.csdn.net/article/details/126494064,如有侵权,请联系删除。