nest 提供者
service module controller
controller 中能使用service 的原因是 service向module中注入的自己 一个健值对
controller通过键 拿到service
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './user/user.module';
@Module({
imports: [UserModule],
controllers: [AppController],
providers: [AppService], // 这里进行了 service注入
})
export class AppModule {}
以上是简写的方式
可以通过一下修改
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './user/user.module';
@Module({
imports: [UserModule],
controllers: [AppController],
providers: [{
provide:'abc',
useclass:AppService
}], // 这里进行了 service注入
})
export class AppModule {}
之后controller中默认的健就会找不到 所以需要手动修改
import { Controller, Get, Inject } from '@nestjs/common';
import { AppService } from './app.service';
import { UserService } from './user/user.service';
@Controller()
export class AppController {
// 通过在这里添加Inject装饰器 手动赋予键
constructor(@Inject('abc') private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
还可以通过此方法传常量
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './user/user.module';
@Module({
imports: [UserModule],
controllers: [AppController],
providers: [{
provide:'abc',
useClass:AppService
},
{ // 注入一个字符串
provide:'aog',
useValue:'123456789'
}],
})
export class AppModule {}
还可以传递一个工厂方法
新建一个service类
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService2 {
getHello(): string {
return 'eihei!';
}
}
import { Inject, Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AppService2 } from './app.service2';
import { UserModule } from './user/user.module';
@Module({
imports: [UserModule],
controllers: [AppController],
providers: [AppService2,{ //注入 新创建的
provide:'abc',
useClass:AppService
},
{
provide:'aog',
useValue:'123456789'
},
{
provide:'factory',
inject:[AppService2],
useFactory(AppService:AppService2):string{
return AppService.getHello()
}
}],
})
export class AppModule {}
可以是一个异步的方法
{
provide: 'factory',
inject: [AppService2],
async useFactory(AppService: AppService2) {
return await new Promise((r )=> {
setTimeout(() => {
r(AppService.getHello() + '6')
}, 2000)
})
}
}