Angular2 - список провайдеров как константа не работает

Я пытаюсь создать оболочку для XHRBackend класс, и я смог успешно создать и использовать все предоставляемые услуги в моем внешнем AppComponent но я не могу упаковать поставщиков в саму услугу. Я внедряю класс в конструктор компонентов, но не могу себе представить, что это что-то сломает.

Текущий 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 ошибка, которая появляется в моей консоли, потому что XHRBackendWrapper не может быть найден. Что мне здесь не хватает?

Я не могу опубликовать весь код, потому что это сделало бы этот вопрос слишком большим, но, если это поможет, это общая идея для XHRBackendWrapper:

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

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

1 ответ

Не совсем уверен, но вам может потребоваться деструктурировать ваших BACKEND_PROVIDERS, например так:

providers: [
    ...HTTP_PROVIDERS,
    /** THIS IS THE ONLY DIFFERENCE HERE!!! ***/
    ...BACKEND_PROVIDERS
]
Другие вопросы по тегам