在super()中使用TypeScript依赖注入

7

我有一个名为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类在其构造函数中具有依赖注入,所以出现了错误,我不知道如何在超类中注入它。

我该如何解决这个问题?


1
如果 UploaderService 中的构造函数没有任何作用,你可以完全删除它。 - ConnorsFan
3个回答

8

您可以像其他答案中所示一样重复参数。

然而,还有另一种方法,当您有许多参数和扩展类时非常方便:使用Injector在基类中获取依赖项。

然后,您只需要在派生类中重复“Injector”注入,这可以节省很多空间和心智健康,当您需要在基类中注入许多服务,但在派生类中不需要很多服务时。

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);
  }
}

5

你需要通过注入

@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);
  }
}

1
不,这不是抄袭。我们同时回答了;) - Fateme Fazli
@MostafaSaadatnia - JonasMS的回答在这个之前已经发布了。请核实你的事实。 - ConnorsFan
@MostafaSaadatnia - 供您参考,当鼠标悬停在“回答...分钟前”上时,您可以在工具提示中看到确切的时间。JonasMH比之前回答了12秒钟。 - ConnorsFan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接