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

https://docs.nestjs.com/fundamentals/module-ref

https://docs.nestjs.com/providers

posted on 2025-11-16 08:00  荣锋亮  阅读(0)  评论(0)    收藏  举报

导航