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
]