2016-08-06 3 views
5

팩토리 제공 업체를 사용해야하는 상황을 상상할 수 없습니다. offical 한 문서 https://angular.io/docs/ts/latest/guide/dependency-injection.html 상황에 따라 Angular 2 팩토리 함수는 언제 사용합니까?

는이 (하나 ( 서비스-A) 다른 서비스 내에서 서비스 ( 서비스-B)에 액세스 할 수 없습니다 수 있지만, 공장 함수가 있다는 것입니다 service-b)에 액세스하십시오. 그래서 언제 이런 일이 실제로 일어날까요? Angulars DI가 MyService를 인스턴스화 할 수있는 경우

+0

내가 링크 된 문서에서 언급 한 텍스트를 어디에서 찾을 수 있습니까? "다른 서비스 (service-a) 내에서 하나의 서비스 (service-b)에 액세스 할 수 없을 수도 있지만 공장 기능은" –

+0

"입니다. 이는 문서를 해석 한 것으로 https : // 각도에서 찾으십시오 .io/docs/ts/latest/guide/dependency-injection.html #! # injector-providers "텍스트?"텍스트 바로 앞에 "Factory providers"섹션이 있습니다. – johncol

답변

6

당신은 클래스를

providers: [MyService] 

이 단지 작품을 전달하여 공급자 등록 할 수 있습니다.

당신은 예를

@Injectable() 
class MyService { 
    constructor(private http: Http, private String configVal) {} 
} 

다음 DI입니다 하지String는 공급자에 대한 유효한 키 (기본 유형이 제공 키로 작동하지 않습니다하지 않기 때문에 인스턴스를 만들 수 있습니다.

을위한 경우 이 필요한 경우

당신은 완전히 어떻게 새로운 기능을 제어

providers: [ 
    { 
     provide: MyService, 
     useFactory: (http) => { 
     return new MyService(http, 'http://mydbserver.com:12345'); 
     }, 
     deps: [Http] 
    } 
] 

이 방법은 같은 공장 기능을 사용할 수 있습니다 축이 생성되고 각도 DI는 인스턴스가 Http 인 팩토리 함수를 호출해야한다는 것을 알아야합니다.

+0

알겠습니다. MyConfigService라는 서비스를 쉽게 만들 수 있습니다. MyConfigService는 이러한 구성 값을 제공하고이를 MyService에 주입합니다. 그래서 우리가 이런 식으로 제공자를 정의 할 수 있도록 각 프레임 워크에 대한 또 다른 이유가 있는지 궁금합니다. 어쨌든 당신의 답변에 감사드립니다! – johncol

+1

예를 들어'Injectable()'데코레이터가없는 클래스를 삽입하고 소스를 소유하고 있지 않기 때문에 클래스를 추가 할 수 없습니다. 나는 여러 다른 것들이있을 것이라고 확신한다. –