我需要在不使用 Angular2 的 DI 的情况下获取 Http 的实例(constructor(private http: Http))
以下代码摘自another stackoverflow question , 它适用于 Angular2 RC.4 及更早版本,但不适用于 RC.5+(HTTP_PROVIDERS 不再可用):
const injector = ReflectiveInjector.resolveAndCreate([
HTTP_PROVIDERS
]);
this.http = injector.get(Http);
Stackoverflow 上有几个相同代码的不同变体的问题,但它们都不适用于 RC.5+。
有人知道如何在 RC.5+ 中执行相同的操作吗?
只需查看 HttpModule
的来源即可.您将看到创建 Http
所需的所有提供程序。这些提供程序中的大多数是现已删除的 HTTP_PROVIDERS
中的提供程序
export function _createDefaultCookieXSRFStrategy() {
return new CookieXSRFStrategy();
}
export function httpFactory(xhrBackend: XHRBackend, requestOptions: RequestOptions): Http {
return new Http(xhrBackend, requestOptions);
}
@NgModule({
providers: [
{provide: Http, useFactory: httpFactory, deps: [XHRBackend, RequestOptions]},
BrowserXhr,
{provide: RequestOptions, useClass: BaseRequestOptions},
{provide: ResponseOptions, useClass: BaseResponseOptions},
XHRBackend,
{provide: XSRFStrategy, useFactory: _createDefaultCookieXSRFStrategy},
],
})
export class HttpModule {
}
只需将上述 providers
中的所有内容添加到您传递给 ReflectiveInjector.resolveAndCreate
的数组中即可。
如果您的目标是在 Bootstrap 之前获取 Http
,那么您还需要注意另一件小事,即 CookieXSRFStrategy
。它在引导之前不起作用,因为它依赖于某些平台浏览器的东西。您可以将其替换为 noop,如 this post 中所述