2016-06-22 3 views
0

У меня есть два 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) Я унаследовавшие SalesReceiptRepository от InvoiceRepository, я должен пройти все необходимые параметры для super класса constructor. Угловая отдельно inject зависимости от базового класса и производного класса, когда SalesReceiptRepoistory объект get создан? ИЛИ Базовый класс будет извлекаться из его производного класса? Немного смущает, пожалуйста, кратко объяснить, как эти две работы вместе

2) Если вы посмотрите на InvocieRepository конструктор 3 parameter, InvoiceType является enum и я недобросовестный его первое значение. Но в заявлении console это значение регистрации api/, которое на самом деле является значением 4-го числа parameter. Итак, что он делает, установив для третьего и четвертого значений параметра значение api/, где 3-й должен быть 1. Это происходит только тогда, когда InvoiceRepository объект get'screated, однако он хорошо себя ведет, когда создается объект get's SalesReceipRepository. Зачем?

+0

2) Почему вы добавили этот параметр в первую очередь? Вы предоставили 'обеспечить (InvoiceType: {useValue: InvoiceType.SomeItem})' где-нибудь? –

+0

Нет, я хочу, чтобы оно было настроено на какое-то значение по умолчанию, когда экземпляр InvoiceRepository создал DI. Однако в случае «SalesReceiptRepository» я вручную вызываю конструктор «базовый класс», поэтому он работает правильно. –

+0

Я вижу. Я думаю, вам нужно добавить '?' В конец ('invocieType ?: InvoiceType = ...') имени параметра, чтобы пометить его как необязательный. Также может потребоваться переместить необязательные параметры в конце списка параметров (не уверен в этом). –

ответ

1

Угловой впрыснет только в производный класс, поэтому из-за этого вам нужно передать все параметры в супер конструктор. Чтобы лучше понять ситуацию, мне нужно посмотреть, где и как вы предоставляете эти услуги, потому что код выглядит совершенно правдоподобным.