Angular - 以构造函数以外的其他方式注入(inject)?

标签 angular typescript angular2-services angular-services

在 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/

相关文章:

Angular --prod build 从编译的 CSS 中剥离 SVG 属性

angular - 无效管道参数 : '' for pipe 'AsyncPipe' at invalidPipeArgumentError

angular - Angular 2 中的千位分隔符

typescript - 如何在 TypeScript 中等待 Http 应答 - Angular 5

angularjs - Angular 的可观察响应中不存在属性图

javascript - Angular 8 + RxJS 以及合并 flatMap 和 forkJoin 的问题

angular - 应该对所有事情都使用 ChangeDetectionStrategy.OnPush 吗?

requirejs - 结合 Typescript 和 AMD 使用 requirejs 的相对路径

javascript - 如何使用asp.net从Angular 2发送的url中读取JSON数据

dart - Angular 2 Dart 中的网络 worker