[NestJS] provider

Younghwan Cha·2023년 6월 13일
0

Nest.js

목록 보기
18/27
post-thumbnail

Module


@Module() 데코레이터는 하나의 객체를 인자로 가지며, 객체가 가질 수 있는 프로퍼티는 아래와 같다.

providers: Nest injector에 의해 인스턴스화되고, 최소 현재 모듈에서 공유될 provider의 집합
controllers: 인스턴스화해야 하는, 현재 모듈에 정의된 Controller의 집합
imports: 현재 모듈에서 필요한 provider들을 export한 import된 모듈의 집합
exports: 현재 모듈에 의해 제공되며 현재 모듈을 import하는 다른 모듈에서 사용할 수 있어야 하는 provider의 하위 집합

모듈은 기본적으로 provider를 캡슐화한다. 따라서, 현재 모듈의 providers에 등록되지않았거나 import한 모듈에서 export하지 않은 provider를 inject하는 것은 불가능하다.

Provider


@Injectable() decorator 가 달린 class 가 provider 이다.

// src/app.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  sayHello(): string {
    return 'Hello Nest!';
  }
}

// src/app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  sayHello(): string {
    return this.appService.sayHello();
  }
}

provider의 주요 아이디어는 dependencies를 inject할 수 있다는 것이다.
결국, appService: AppService 와 같이 타입을 지정해주는 것으로 appService 변수를 AppService instance 로 만들어준다.

profile
개발 기록

0개의 댓글