開発覚書はてな版

個人的な開発関連の備忘録

【NestJS】Custom providersで文字列をキーにする

概要

  • Custom providers で文字列を指定したサンプルです。
  • Moduleのprovidersに { provide: 文字列キー, useClass: サービスクラス } で定義します。
  • 定義したサービスはModuleRefを使用してContoller内部で生成します。

docs.nestjs.com

docs.nestjs.com

実行環境

  • Node.js - 10.x

使用ライブラリ

  • @nestjs/core - 6.7.x

サンプルソース

services/hello.service.ts

import { Injectable } from '@nestjs/common';

@Injectable()
export class HelloService {
  getHello(): string {
    return 'Hello World!';
  }
}

app.module.ts

import { Module } from '@nestjs/common';

import { AppController } from './app.controller';
import { HelloService } from './services/hello.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [{ provide: 'HELLO_SERVICE', useClass: HelloService }],
})
export class AppModule {}

app.controller.ts

import { Controller, Get } from '@nestjs/common';
import { ModuleRef } from '@nestjs/core';

import { HelloService } from './services/hello.service';

@Controller()
export class AppController {
  constructor(private readonly moduleRef: ModuleRef) {}

  @Get()
  getHello(): string {
    const service = this.moduleRef.get('HELLO_SERVICE') as HelloService;
    return service.getHello();
  }
}

サンプルソース一式

github.com