我扩展了XHRBackend
类,我想注入我的全局服务,提供自举。我试图通过构造器注入它Angular2:无法解析全球服务
export class AppXHRBackend extends XHRBackend {
constructor(
browserXHR: BrowserXhr,
baseResponseOptions: ResponseOptions,
@Inject(AppState) private app: AppState) {...}
...
}
但我得到undefined
。然后我试图通过注射器手动解决它:
export class AppXHRBackend extends XHRBackend {
constructor(browserXHR: BrowserXhr, baseResponseOptions: ResponseOptions) {
let injector = ReflectiveInjector.resolveAndCreate([AppState]);
let app = injector.get(AppState);
...
}
我的AppState
实例,但是,这是新的实例,我认为这是正确的,它应该是这样的,但我想我的单独服务。
这里是我bootsrap应用:
bootstrap(App, [
...
AppState,
provide(ExceptionHandler, {useClass: AppExceptionHandler}),
provide(XHRBackend, {useClass: AppXHRBackend})
])
这里是我的服务:
import { Injectable, EventEmitter } from '@angular/core';
@Injectable()
export class AppState {
...
}
顺便说一句,我的服务AppState
很好的AppExceptionHandler
类通过它的构造injectes:
export class AppExceptionHandler extends ExceptionHandler {
constructor(@Inject(AppState) private app: AppState) {...}
...
}
而且我没有看到非常大的差异这两个扩展,所以我不明白为什么它不起作用AppXHRBackend
一般来说,我只是希望我的全球服务,以处理全球401,403,404状态码。也许我会为了这个目的而错误的做法?
UPD 经由UseFactory
TY @yurzui通过提供解决:
{
provide: XHRBackend,
useFactory: (browserXHR: BrowserXhr,
baseResponseOptions: ResponseOptions,
xsrfStrategy: XSRFStrategy,
appState: AppState) => new AppXHRBackend(browserXHR, baseResponseOptions, xsrfStrategy, appState)
,
deps: [BrowserXhr, ResponseOptions, XSRFStrategy, AppState]
}
是否'AppState'有参数的构造函数? –