2016-07-18 2 views
1

I있는 클래스를 확장 BaseRequestOptions 다음 코드는 I this.serviceA 참조하면2 분사 각도 서비스 (BaseRequestOptions)

import { Injectable } from '@angular/core'; 

@Injectable() 
export class AppRequestOptions extends BaseRequestOptions { 
    constructor(private serviceA:ServiceA) {  
     super();   
    } 
    merge(options?: RequestOptionsArgs): RequestOptions {   
     console.log(this.serviceA); 
     //this.serviceA.myCustomMethod(); 
     return super.merge(options); 
    } 
} 

undefined이다. 동일한 서비스를 다른 서비스/구성 요소에 주입하면 예상대로 작동합니다. 여기

는 전체 부트 스트랩 코드 :

import { Injectable } from '@angular/core'; 
import { bootstrap } from '@angular/platform-browser-dynamic'; 
import { AppComponent } from './app.component'; 
import { APP_ROUTER_PROVIDERS } from './routes'; 
import { HTTP_PROVIDERS, BaseRequestOptions, RequestOptions, RequestOptionsArgs, Headers } from '@angular/http'; 
import { ServiceA } from './ServiceA'; 

@Injectable() 
export class AppRequestOptions extends BaseRequestOptions { 
    constructor(private serviceA:ServiceA) {  
     super();   
    } 
    merge(options?: RequestOptionsArgs): RequestOptions {   
     console.log(this.serviceA); 
     //this.serviceA.myCustomMethod(); 
     return super.merge(options); 
    } 
} 

bootstrap(AppComponent, [ 
    APP_ROUTER_PROVIDERS, 
    HTTP_PROVIDERS, 
    ServiceA, 
    { provide: RequestOptions, useClass: AppRequestOptions } 
]).catch(err => console.error(err)); 

ServiceA declaretion :

import { Injectable } from '@angular/core'; 

@Injectable() 
export class ServiceA { 
    myCustomMethod() { 

    } 
} 

내가 각도 버전 을 사용하고 2.0.0-rc.4

나는 확실하지 않다 나는 클래스를 확장하고 그것을 @Injectable()으로 표시했기 때문에 그것이 맞습니까?

내가 선택하고 내가 찾을 수있는 유일한 관련 질문은 다음과 같습니다가 오픈 관련이 같은

Inject service inside a service inside a service in my Angular 2 application

Angular 2: Inject Service to another service. (No provider error)

UPDATE

보인다 버그 : https://github.com/angular/angular/issues/8925

+0

의 버전 Angular2 당신이 사용합니까? –

+0

@ThierryTemplier 2.0.0-rc.4를 사용 중입니다. –

+0

AppRequestOptions이 @Injectable이 아닙니다. – estus

답변

3

이 문제에 대한 열린 버그가 있습니다 : https://github.com/angular/angular/issues/9758.

종속성 삽입을위한 메타 데이터가 올바르게 설정되어 있지만 요소는 생성자 수준의 클래스 인스턴스에 제공되지 않습니다.

@Injectable() 
export class AppRequestOptions extends BaseRequestOptions { 
    constructor(private serviceA:ServiceA) {  
    super();   
    console.log(Reflect.getMetadata('design:paramtypes', AppRequestOptions)); 
    console.log(Reflect.getMetadata('parameters', AppRequestOptions)); 
    } 

    (...) 
} 

은 자세한 내용은이 plunkr를 참조하십시오 https://plnkr.co/edit/hcqAfsI7u88jbjScq6m3?p=preview.

편집

당신이 BaseRequestOptions 한 대신 RequestOptions 클래스를 사용하는 경우가 작동합니다 https://plnkr.co/edit/laP04kqUCOR5qbFgo0iM?p=preview :

@Injectable() 
export class AppRequestOptions extends RequestOptions { 
    constructor(private serviceA:ServiceA) {  
    super();   
    } 

    (...) 
} 

이 plunkr를 참조하십시오.

+0

특별히이 https://github.com/angular/angular/issues/8925와 관련이있는 것으로 보입니다 –

+1

예, BaseRequestOptions 대신 클래스 RequestOptions과 함께 작동합니다 .-- 그에 따라 대답하십시오 ... –

+1

감사합니다, 'RequestOptions'확장하여 업데이 트 내 문제를 해결. –

1

이 내가 여기에 대답 질문과 매우 유사합니다 : Injected dependency is undefined when extending BaseRequestOptions

제공 업체는 필요한 종속성을 정의 정의, 그래서 당신의 공급자 정의의 객체가 보일 것 같은 :

{ 
provide: RequestOptions, 
useClass: AppRequestOptions, 
deps: [ServiceA] 
}