私は2つのTSを持っているリポジトリクラス角度2 DIと活字体の継承
1)InvoiceRepository 2)SalesReceiptRepositroyここ
ですがコンストラクタは
InvoiceRepositoryどのように見えるか
export class InvoiceRepository extends RepositoryBase {
constructor(
protected http: Http,
protected toasterService: ToasterService,
protected progressbarService: ProgressBarService,
invocieType: InvoiceType = InvoiceType.Invoice,
@Inject('ApiEndpoint') protected apiEndpoint: string) {
super(toasterService, progressbarService);
console.log(invocieType);
}
}
SalesReceiptRepositroy
export class SalesReceiptsRepository extends InvoiceRepository {
constructor(http: Http,
toasterService: ToasterService,
progressbarService: ProgressBarService,
@Inject('ApiEndpoint') apiEndpoint: string) {
super(http, toasterService, progressbarService, InvoiceType.InvoiceCC, apiEndpoint);
}
}
質問:
1)私はInvoiceRepository
からSalesReceiptRepository
を継承しています、私はsuper
クラスconstructor
に必要なすべてのパラメータを渡す必要があります。代わりに角がありますかSalesReceiptRepoistory
オブジェクトを作成したときに、基底クラスと派生クラスへの依存性はinject
になりますか?または、基底クラスはその派生クラスから継承しますか?少し混乱、簡単にあなたがInvocieRepository
コンストラクタの第三parameter
を見れば、InvoiceType
はenum
であると私は最初の値にそれをデフォルトにしていますどのように一緒にこれらの二つの作品
2)説明してください。しかし、console
ステートメントでは、ログ値はapi/
であり、実際には4番目の値parameter
です。つまり、3番目と4番目のパラメータの値をapi/
に設定し、3番目のパラメータは1
でなければなりません。これは、InvoiceRepository
オブジェクトが取得されたときにのみ発生しますが、SalesReceipRepository
オブジェクトが作成されるとうまく動作します。どうして?
2)なぜこのパラメータを最初に追加したのですか? 'provide(InvoiceType:{useValue:InvoiceType.SomeItem})'をどこかに提供しましたか? –
いいえ、私は 'InvoiceRepository'インスタンスがDIによって作成されたときにそれをデフォルト値に設定します。しかし、 'SalesReceiptRepository'の場合、私は手動で基本クラス' constructor'を呼び出して正しく動作するように見えます。 –
を参照してください。私はオプションとしてマークするために、パラメータ名の最後に '?'( 'invocieType?:InvoiceType = ...')を追加する必要があると思います。また、パラメータリストの最後にオプションのパラメータを移動する必要があるかもしれません(これについてはわかりません)。 –