Angular 将服务注入基类而不是子类,并在子类中使用父服务

Angular 将服务注入基类而不是子类,并在子类中使用父服务,angular,typescript,angular7,Angular,Typescript,Angular7,使用Angular 7&Typescript:我有一个基类,它使用了很多服务和子类(大约40个子类),我不想在所有子类构造函数中添加这些服务,并将它们传递给super(),但我仍然需要在所有子类中使用这些服务 再添加一个服务并在其中注入所有必需的服务。我们可以简单地将该服务添加到一个子类中,并在super中将其传递给父类 @injectable() export class ParentService { constructor(type: string, private servic

使用Angular 7&Typescript:我有一个基类,它使用了很多服务和子类(大约40个子类),我不想在所有子类构造函数中添加这些服务,并将它们传递给
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”,而不需要将其注入每个子类,然后将其作为参数传递吗?