Provider
- 객체는 서로 다양한 관계를 만들 수 있으며 객체의 인스턴스를 "연결"하는 기능은 대부분 Nest 런타임 시스템에 위임할 수 있다.
- 다른 객체간에
@Injectable()
의 데코레이터를 사용하여 의존성 주입 할수 있다.
Custom providers
- 일반 값이나 동기/비동기 팩토리를 Provider로 정의할 수도 있다.
- 사실 일반적으로 아래와 같이 providers로 전달하는 방법은 다양한 방법중에 Class Provider를 전달하는 방법을 약어로 설정한 것이다.
# 두 코드 동일
@Module({
controllers: [CatsController],
providers: [CatsService],
})
@Module({
controllers: [CatsController],
providers: [
{
provide: CatsService,
useClass: CatsService,
},
];
})
- IoC (Inversion Of Control) - 제어의 역전
- 다른 의존 객체에게 필요한 의존성을 주입하는 역할을 한다, 의존성들을 관리해주는 역할
- Optional Provider -
@Optional()
- 클래스는 구성 객체에 종속될 수 있지만 전달되는 것이 없으면 기본값을 사용해야하나 상위 Provider를 선택적으로 가져올 수 있다.
- Property-based Injection -
@Inject
> property에도 의존성 주입 할 수있다.
- 최상위 클래스가 하나 또는 여러 프로바이더에 의존하는 경우에 사용한다.
- Provider의 constructor의 인수에
@Inject()
데코레이터를 통해 다른 Provider의 의존성을 주입 받을 수 있다.
- warn : 클래스가 다른 프로바이더를 확장하지 않는 경우 항상 생성자 기반 주입 사용을 선호한다.
- Provider registration
- 최종적으로 module에 provider를 정의하여 종속성을 맺는다.