nestjs 通过名称获取ioc服务
nestjs 一个比较强大的功能就是ioc,一般如果大家都使用ts 就比较简单,但是我们可能希望使用名称获取注册的服务,以下是一个简单说明
机制
核心就是通过注册提供一个token名称,之后通过这个名称获取服务
参考使用
- 注册服务
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { APP_SERVICE } from './constants';
@Module({
imports: [],
controllers: [AppController],
// 此处是核心,注册使用provide (token) useClass 是类
providers: [{
provide: APP_SERVICE,
useClass: AppService
}],
})
export class AppModule {}
- 使用
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { APP_SERVICE } from './constants';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const helloMessage = app.get(APP_SERVICE).getHello();
console.log(helloMessage);
await app.listen(process.env.PORT ?? 3000);
}
bootstrap();
说明
通过基于名称的服务查找还是有用的,比如一些动态场景,目前来说机制上暂时不如midwayjs 使用简单,midwayjs 可以直接通过服务名就可以获取服务, 当然通过moduleRef 也是一种方法,后边会介绍下
参考资料
https://midwayjs.org/en/docs/container
浙公网安备 33010602011771号