0
点赞
收藏
分享

微信扫一扫

小满nestjs(第十章 nestjs 提供者)


Providers

Providers 是 ​​Nest​​​ 的一个基本概念。许多基本的 ​​Nest​​​ 类可能被视为 provider - ​​service​​​,​​ repository​​​, ​​factory​​​, ​​helper​​​ 等等。 他们都可以通过 ​​constructor​​ 注入依赖关系。 这意味着对象可以彼此创建各种关系,并且“连接”对象实例的功能在很大程度上可以委托给 ​​Nest​​​运行时系统。 Provider 只是一个用 ​​@Injectable()​​ 装饰器注释的类。

1.基本用法

module 引入 service  在 providers 注入 

小满nestjs(第十章 nestjs 提供者)_ide

在Controller 就可以使用注入好的service 了 

小满nestjs(第十章 nestjs 提供者)_ide_02

 

2.service 第二种用法(自定义名称)

第一种用法就是一个语法糖

其实他的全称是这样的

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 { }

小满nestjs(第十章 nestjs 提供者)_开发语言_03

 自定义名称之后 需要用对应的Inject 取 不然会找不到的

小满nestjs(第十章 nestjs 提供者)_servlet_04

 3.自定义注入值

通过 useValue

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 { }

小满nestjs(第十章 nestjs 提供者)_java_05

 

小满nestjs(第十章 nestjs 提供者)_自定义_06

 3.工厂模式

如果服务 之间有相互的依赖 或者逻辑处理 可以使用 useFactory

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 { }

小满nestjs(第十章 nestjs 提供者)_ide_07

 

小满nestjs(第十章 nestjs 提供者)_开发语言_08

 4.异步模式

useFactory 返回一个promise 或者其他异步操作

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 { }

小满nestjs(第十章 nestjs 提供者)_开发语言_09

 

举报

相关推荐

0 条评论