Angular 의존성 주입 - (2) 프로바이더 (Provider)
프로바이더 (Provider)
Angular는 서비스의 인스턴스 생성과 구성요소에 그 서비스를 주입하는 권한을 위임 받았다. 그러나, Angular는 인스턴스를 어떻게 생성하는지 모르므로 이를 알려줘야 한다. 그 역할을 프로바이더가 한다.
따라서 프로바이더는 Angular에 의존성 인스턴스의 생성 정보를 알린다.
프로바이더 사용 방법
@Injectable의 provideIn 프로퍼티
// 루트 인젝터에 제공
@Injectable({
providedIn: 'root',
})
// 특정 모듈에 등록
// 그 모듈의 **모든 구성요소에서 주입할 수 있음.**
@Injectable({
providedIn: YourModule,
})
@Component 메타데이터의 providers 프로퍼티
// 해당 컴포넌트와 하위 컴포넌트에 주입할 수 있음.
@Component({
...
providers: [TempService]
})
@NgModule 메타데이터의 providers 프로퍼티
// 그 모듈의 **모든 구성요소에서 주입할 수 있음.**
@NgModule({
...
providers: [TempService]
})
프로바이더의 종류
- 클래스 프로바이더 : 앞에서 설명했으므로 생략
- 값 프로바이더
- 팩토리 프로바이더
값 프로바이더
주입 대상의 타입이 클래스가 아닌 문자열, 숫자, 불리언 타입일 경우
providers: [
{
provide: 'API',
useValue: 'https://api.myserver.com/get'
// provide 토큰을 클래스로 지정할 수 없으므로 문자열로 한다.
}
]
~
constructor(
// 문자열은 타입 추론이 안되므로 @Inject 데코레이터를 사용한다.
@Inject('API') private api: string
)
팩토리 프로바이더
의존성 인스턴스를 생성할 때 어떠한 로직을 거쳐야 할 때, 팩토리 함수를 통해 로직을 처리하고 인스턴스를 생성한다.
~~.service.provider.ts를 만들어서 팩토리 프로바이더와 팩토리 함수를 정의한다. 아래 예시를 보자.
import { TestService } from './test-service-1';
import { MockTestService } from './test-service-2';
// Factory Function
const factoryFunc = (param) => param ? new TestService : new MockTestService;
// Factory Provider
export const TestServiceProvider = {
provide: TestService,
use**Factory**: factoryFunc, // 팩토리 함수 등록
deps: ['param']
};
// Provider that injects value to factory function
export const SetParamProvider = {
provide: 'param',
useValue: false
}
~
// Component
@Component({
...
providers: [
TestServiceProvider,
SetParamProvider
]
})
- provide : 최종적으로 생성될 인스턴스 Type
- useFactory : 사용할 팩토리 함수
- deps : 팩토리 함수에 주입할 의존성 토큰 배열
'공부 > Angular' 카테고리의 다른 글
Angular에서 Tailwind CSS 사용해보기 (0) | 2020.07.14 |
---|---|
Angular 의존성 주입 - (4) 선택적 의존성 주입 (0) | 2020.07.07 |
Angular 서비스 주입 - (3) 인젝션 토큰 (0) | 2020.07.07 |
Angular 의존성 주입 - (1) 서비스 (0) | 2020.07.07 |
댓글
이 글 공유하기
다른 글
-
Angular에서 Tailwind CSS 사용해보기
Angular에서 Tailwind CSS 사용해보기
2020.07.14 -
Angular 의존성 주입 - (4) 선택적 의존성 주입
Angular 의존성 주입 - (4) 선택적 의존성 주입
2020.07.07 -
Angular 서비스 주입 - (3) 인젝션 토큰
Angular 서비스 주입 - (3) 인젝션 토큰
2020.07.07 -
Angular 의존성 주입 - (1) 서비스
Angular 의존성 주입 - (1) 서비스
2020.07.07