【问题标题】:typescript dependency injection in super()super() 中的 typescript 依赖注入
【发布时间】:2020-02-05 19:04:35
【问题描述】:

我有一个名为 restService 的类,如下所示:

@Injectable({
  providedIn: 'root'
})
export class RestService {

  private baseUrl: string;

  constructor(private http: HttpClient) {
    this.baseUrl = environment.jsonServerUrl;
  }
}

我有另一个类扩展 RestService 类,称为 UploaderService,如下所示:

@Injectable({
  providedIn: 'root'
})
export class UploaderService extends RestService {

  constructor() {
    super(); // error occurred here!
  }
}

但是当我编写超级方法时发生错误,因为 RestService 类在其构造函数中具有依赖注入,我不知道如何在超级中注入它。 我该如何解决?

【问题讨论】:

  • 如果UploaderService 中的构造函数什么都不做,你可以完全放弃它。

标签: angular typescript inheritance dependency-injection superclass


【解决方案1】:

您可以重复参数,如其他答案所示。

不过,还有另一种方法,当您有许多参数和扩展类时,这很方便:使用Injector 获取基类中的依赖项。

然后,您只需要在派生类中重复“Injector”注入,当您在基类中有很多服务要注入而在派生类中注入的服务不多时,这可以节省大量空间和头脑。

p>
import { MyService } from './my.service';
import { FooService } from './foo.service';
import { Injector } from '@angular/core';

export class Base {
    protected myService: MyService;
    protected fooService: FooService;

  constructor (protected injector: Injector) {
    this.myService = injector.get(MyService);
    this.fooService = injector.get(FooService);
  }
}

export class Derived extends Base {
  constructor(protected injector: Injector) {
    super(injector);
  }
}

【讨论】:

    【解决方案2】:

    你需要通过注入

    @Injectable({
      providedIn: 'root'
    })
    export class UploaderService extends RestService {
    
      constructor(http: HttpClient) {
        super(http);
      }
    }
    

    【讨论】:

      【解决方案3】:

      超类的参数需要重复传递给超调用:

      @Injectable({
          providedIn: 'root'
      })
      export class UploaderService extends RestService {
        constructor (http: HttpClient){
          super(http);
        }
      }
      

      【讨论】:

      • 不,这不是副本。我们同时回答;)
      • @MostafaSaadatnia - JonasMS 的答案发布在此之前。请检查你的事实。
      • @MostafaSaadatnia - 供您参考,当鼠标悬停在“已回答...分钟前”时,您可以在工具提示中查看确切时间。 JonasMH 提前 12 秒回答。
      猜你喜欢
      • 2013-04-10
      • 1970-01-01
      • 2016-07-19
      • 2015-08-28
      • 2014-12-04
      • 2017-01-15
      • 1970-01-01
      • 2020-02-13
      • 2015-11-05
      相关资源
      最近更新 更多