2016-07-12 9 views
0

XHRBackendクラスのラッパーを作成しようとしていて、最外部のAppComponentで提供されているすべてのサービスを正常に作成して使用できましたが、パッケージ化できません実際のサービス自体のプロバイダ。私はコンポーネントのコンストラクタにクラスを注入していますが、私はそれが何かを破壊するとは想像できません。Angular2 - 定数が動作しないプロバイダーのリスト

現在AppComponentコード:

import {HTTP_PROVIDERS, Http, ConnectionBackend, RequestOptions} from "@angular/http"; 
import {ROUTER_DIRECTIVES} from "@angular/router"; 
import {XHRBackendWrapper} from 'backendwrapper.services'; 

@Component({ 
    selector: 'app', 
    template: './app.component.html', 
    directives: [ROUTER_DIRECTIVES], 
    providers: [ 
     HTTP_PROVIDERS, 
     provide(Http, { 
      useFactory: (xhrBackend: ConnectionBackend, requestOptions: RequestOptions) => new Http(xhrBackend, requestOptions), 
      deps: [XHRBackendWrapper, RequestOptions] 
     }), 
     XHRBackendWrapper 
    ] 
}) 
export class AppComponent { 
    constructor(xhrBackend: XHRBackendWrapper){ 
    } 
} 

希望AppComponentコード:

import {HTTP_PROVIDERS} from "@angular/http"; 
import {ROUTER_DIRECTIVES} from "@angular/router"; 
import {BACKEND_PROVIDERS, XHRBackendWrapper} from 'backendwrapper.services'; 

@Component({ 
    selector: 'app', 
    template: './app.component.html', 
    directives: [ROUTER_DIRECTIVES], 
    providers: [ 
     HTTP_PROVIDERS, 
     /** THIS IS THE ONLY DIFFERENCE HERE!!! ***/ 
     BACKEND_PROVIDERS 
    ] 
}) 
export class AppComponent { 
    constructor(xhrBackend: XHRBackendWrapper){ 
    } 
} 

バックエンドラッパーから一定のエクスポート希望:私は私が手にこれをやろう

export const BACKEND_PROVIDERS = [ 
    provide(Http, { 
     useFactory: (xhrBackend: ConnectionBackend, requestOptions: RequestOptions) => new Http(xhrBackend, requestOptions), 
     deps: [XHRBackendWrapper, RequestOptions] 
    }), 
    XHRBackendWrapper 
]; 

One or more of providers for "AppComponent" were not definedコンソールbに表示されるエラーその間にXHRBackendWrapperが見つかりません。私はここで何が欠けていますか?

それはこの質問がはるかに大きくなりすぎますので、私はすべてのコードを投稿することはできませんが、それは場合に役立ちます、これはXHRBackendWrapperのための一般的な考え方です:

@Injectable() 
export class XHRBackendWrapper extends ConnectionBackend { 
    constructor(private _xhrBackend: XHRBackend) 
    { 
     super(); 
    } 

    createConnection(request: Request) 
    { 
     return this._xhrBackend.createConnection(request); 
    } 
} 

答えて

0

completlyわからないが、あなたBACKEND_PROVIDERSを次のように解体する必要があります:

providers: [ 
    ...HTTP_PROVIDERS, 
    /** THIS IS THE ONLY DIFFERENCE HERE!!! ***/ 
    ...BACKEND_PROVIDERS 
] 
関連する問題