Angular 2 DI和TypeScript继承

时间:2016-06-22 21:09:01

标签: dependency-injection angular typescript1.8

我有两个TS存储库类

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)我从SalesReceiptRepository继承了InvoiceRepository,我必须将所有必需的参数传递给superconstructor。当inject对象被创建时,Angular会对Base类和Derived类分别SalesReceiptRepoistory依赖吗?或者基类将从它的派生类中获取?有点混淆,请简要说明这两者如何一起工作

2)如果您查看InvocieRepository构造函数3rd parameterInvoiceTypeenum,我将其默认为第一个值。但是在console语句中,它的记录值api/实际上是第4 parameter的值。那么,它正在做什么,将第3和第4参数值都设置为api/,其中第3个应该是1。这仅在InvoiceRepository对象被创建时发生,但是在创建SalesReceipRepository对象时它表现良好。为什么呢?

1 个答案:

答案 0 :(得分:1)

Angular将仅在派生类中注入,因此您需要将每个参数都重新输入到超级构造函数中。为了更好地了解这种情况,我需要了解您提供此服务的位置和方式,因为代码看起来绝对正确。