Angular 将服务注入基类而不是子类,并在子类中使用父服务
使用Angular 7&Typescript:我有一个基类,它使用了很多服务和子类(大约40个子类),我不想在所有子类构造函数中添加这些服务,并将它们传递给Angular 将服务注入基类而不是子类,并在子类中使用父服务,angular,typescript,angular7,Angular,Typescript,Angular7,使用Angular 7&Typescript:我有一个基类,它使用了很多服务和子类(大约40个子类),我不想在所有子类构造函数中添加这些服务,并将它们传递给super(),但我仍然需要在所有子类中使用这些服务 再添加一个服务并在其中注入所有必需的服务。我们可以简单地将该服务添加到一个子类中,并在super中将其传递给父类 @injectable() export class ParentService { constructor(type: string, private servic
super()
,但我仍然需要在所有子类中使用这些服务
再添加一个服务并在其中注入所有必需的服务。我们可以简单地将该服务添加到一个子类中,并在super中将其传递给父类
@injectable()
export class ParentService {
constructor(type: string, private service1: Service1, private service2: Service2,private service3: Service3, private service4: Service4){}
executeService1(){
this.service1.method1();
}
}
export class parentTool {
constructor(private parentService: ParentService){}
}
export class ChildTool1 extends parentTool {
constructor(public parentService: ParentService) {
super("tool1", parentService);
}
}
export class ChildTool2 extends parentTool {
constructor(public parentService: ParentService) {
super("tool2", parentService);
}
}
我以前也有同样的问题,所以我最终使用
injector
服务来执行manulay DI(依赖项注入)
此静态类用于存储喷油器服务的引用
export class AppInjector {
private static injector: Injector;
static setInjector(injector: Injector) {
AppInjector.injector = injector;
}
static getInjector(): Injector {
return AppInjector.injector;
}
}
export class AppModule {
constructor(injector:Injector){
AppInjector.setInjector(injector);// save a injector ref You can use a global injector for preventing injecting all services in all child classes.
In your case, it will be something like this:
import {Injector} from '@angular/core';
//other imports
export class parentTool {
public service1: Service1
public service2: Service2
public service3: Service3
public service4: Service4
constructor(type: string,injector: Injector){
this.serviceInject1 = injector.get(Service1);
this.serviceInject2 = injector.get(Service2);
this.serviceInject3 = injector.get(Service3);
this.serviceInject4 = injector.get(Service4);
}
}
export class ChildTool1 extends parentTool {
constructor(injector: Injector) {
super(injector);
this.service1.someMethodCall()
}
}
export class ChildTool2 extends parentTool {
constructor(injector: Injector) {
super(injector);
this.service1.someMethodCall()
}
}
在应用程序模块中,我设置了Injotor服务
export class AppInjector {
private static injector: Injector;
static setInjector(injector: Injector) {
AppInjector.injector = injector;
}
static getInjector(): Injector {
return AppInjector.injector;
}
}
export class AppModule {
constructor(injector:Injector){
AppInjector.setInjector(injector);// save a injector ref You can use a global injector for preventing injecting all services in all child classes.
In your case, it will be something like this:
import {Injector} from '@angular/core';
//other imports
export class parentTool {
public service1: Service1
public service2: Service2
public service3: Service3
public service4: Service4
constructor(type: string,injector: Injector){
this.serviceInject1 = injector.get(Service1);
this.serviceInject2 = injector.get(Service2);
this.serviceInject3 = injector.get(Service3);
this.serviceInject4 = injector.get(Service4);
}
}
export class ChildTool1 extends parentTool {
constructor(injector: Injector) {
super(injector);
this.service1.someMethodCall()
}
}
export class ChildTool2 extends parentTool {
constructor(injector: Injector) {
super(injector);
this.service1.someMethodCall()
}
}
导出类AppModule{
建造师(注入器:注入器){
AppInjector.setInjector(injector);//保存injector ref您可以使用全局injector来防止注入所有子类中的所有服务。
在您的情况下,它将是这样的:
请看一看否我不想在那里使用eventEmitter。正确的,谢谢。真的没有办法在parentTool类中只提到“parentService”,而不需要将其注入每个子类,然后将其作为参数传递吗?