角度 - 以构造函数以外的其他方式注入?



在 Angular 中,我有一个服务,它通过constructor(...)注入了很少的东西。但是,该服务也在通过调用构造函数创建的某个位置。因此,将它所依赖的另一个服务添加到参数中会更改 API。我想避免这种情况。

有没有办法在不将其添加到构造函数参数的情况下将服务注入另一个服务? 例如现场注入?

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,但最好的方法是将其注入到服务中:

constructor(private injector: Injector) {
let httpService: Http = this.injector.get(Http);
}

更多关于喷油器的信息可以在这里找到: https://angular.io/api/core/Injector

这里也是可用的链接,如@DBosley所述:https://angular.io/guide/dependency-injection#appendix-working-with-injectors-directly

您可以使用工厂提供程序在 Angular 的 DI 中执行此操作:

injectFields(dependency: SomeDependency) {
let service = new FieldInjectedService();
service.dependency = dependency;
return service;
}
...
providers: [
{ provide: FieldInjectedService, useFactory: injectFields, deps: [SomeDependency] },
...
]

在这里,FieldInjectedService没有任何构造函数参数,但必须将其dependency属性设置为任何用途。当然,缺点是这里没有任何内容要求您设置这些字段,因此您可以轻松创建无效的服务实例。

依赖字段注入带有角度 14:

import { Component, inject } from '@angular/core';
@Component({
selector: 'app-demo',
templateUrl: './demo.component.html',
styleUrls: ['./demo.component.scss']
})
export class DemoComponent {
private _service = inject(Service);
}

请参阅文档

相关内容

  • 没有找到相关文章

最新更新