簡體   English   中英

super() 中的 typescript 依賴注入

[英]typescript dependency injection in super()

我有一個名為 restService 的 class,如下所示:

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

  private baseUrl: string;

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

我有另一個 class 擴展 RestService class 稱為 UploaderService ,如下所示:

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

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

但是當我寫超級方法時發生錯誤,因為 RestService Class 在其構造函數中有依賴注入,我不知道如何在超級中注入它。 我該如何解決?

你需要通過注入

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

  constructor(http: HttpClient) {
    super(http);
  }
}

超級class的參數需要重復傳遞給超級調用:

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

您可以重復參數,如其他答案所示。

但是,當您有許多參數和擴展類時,還有另一種方法很方便:使用Injector獲取基礎 class 中的依賴項。

然后,您只需要在派生類中重復“Injector”注入,當您在基類 class 中注入許多服務時,這可以節省大量空間和頭腦清醒,但在派生類 class 中注入的服務不多。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM