티스토리 뷰

Nest

#3 Nest 프로바이더(Provider)

림디 2024. 12. 4. 18:00

프로파이더는 Nest의 기본 개념입니다. 많은 기본 Nest 클래스는 프로바이더로 취급될 수 있습니다. 서비스, 리포지토리, 팩토리, 헬퍼 등입니다. 제공자의 주요 아이디어는 종속성으로 주입될 수 있다는 것입니다. 즉, 객체는 서로 다양한 관계를 만들 수 있으며 이러한 객체를 "연결"하는 기능은 대체로 Nest 런타임 시스템에 위임될 수 있습니다. 

@Injectable 데커레이터를 선언 함으로써 다른 어떤 Nest 컴포넌트에서도 주입 할 수 있는 프로바이더가 된다.

예시
Something Contoller 에서 SomethingService를  사용한다면 SomethingService 형태는 다음과 같습니다.

import { Injectable } from '@nestjs/common';
import { Something } from './interfaces/something.interface';

@Injectable()
export class SomeThingService {
  private readonly somethings: Something[] = [];

  create(something: Something) {
    this.somethings.push(something);
  }

  findAll(): Something[] {
    return this.somethings;
  }
}


Nest는 일반적으로 종속성 주입(Dependency Injection)으로 알려진 강력한 디자인 패턴을 기반으로 구축되었습니다.
DI 관련: https://angular.dev/guide/di

프로바이더 사용 
@Module() 데코 레이터 안에서 providers: [ ]  배열안에 등록해 줘야 사용할 수있다.

프로바이더를 사용 하면서 상속 기반일 경우의 예시 

//Base-1 
export class BaseService {
	construct(private readonly serviceOne: ServiceOne){
    	super(serviceOne)
    }
	getAciton(): string{
    	return "Base Punch"
    }
    getAnotherAction(): string{
    	return this.serviceOne.getAciton()
    } 
}

//Base-2 
export class BaseService {
	@Inject(ServiceOne) private readonly serviceOne: ServiceOne
    
	getAciton(): string{
    	return "Base Punch"
    }
    getAnotherAction(): string{
    	return this.serviceOne.getAciton()
    } 
}


@Injectable()
export class ServiceOne {
	getAciton(): string {
    	return "One Punch"
    }
}

@Injectable()
export class ServiceTwo extends BaseService {
	getAciton(): string {
    	return this.getAnotherAction()
    }
}

 

출처:

 

'Nest' 카테고리의 다른 글

#2 Nest Controller  (0) 2024.12.04
#1 Nest 와 데코레이터(Decorator)  (0) 2024.12.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함