在 Angular 中,我有一个服务,它通过 constructor(...)
注入(inject)了一些东西。然而,该服务也在某个地方通过调用构造函数创建。因此,将它所依赖的另一个服务添加到参数中会更改 API。我想避免这种情况。
有没有办法在不将服务添加到构造函数参数的情况下将服务注入(inject)另一个服务?例如。字段注入(inject)?
import {Inject, Injectable} from "@angular/core";
import {
Http, Request, ConnectionBackend, RequestOptions, RequestOptionsArgs, Response, Headers,
RequestMethod
} from "@angular/http";
import {KeycloakService} from "./keycloak.service";
import {Observable} from 'rxjs/Observable';
import {EventBusService} from "../events/event-bus.service";
import {LoadingSomethingFinishedEvent, LoadingSomethingStartedEvent} from "../events/windup-event";
@Injectable()
export class WindupHttpService extends Http {
constructor(
_backend: ConnectionBackend,
_defaultOptions: RequestOptions,
private _keycloakService: KeycloakService,
// ----- This is what I want to avoid. -----
private _eventBus: EventBusService,
) {
super(_backend, _defaultOptions);
}
// ------- This is what I am looking for ---------
//@Inject()
//private _eventBus: EventBusService;
最佳答案
是也不是。
您可以使用Injector
,但最好的方法是将其注入(inject)到服务中:
constructor(private injector: Injector) {
let httpService: Http = this.injector.get(Http);
}
可在此处找到有关 Injector 的更多信息: https://angular.io/api/core/Injector
正如@DBosley 提到的,这里也是可用的链接:https://angular.io/guide/dependency-injection#appendix-working-with-injectors-directly
关于Angular - 以构造函数以外的其他方式注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45225676/