@PhilipFeldmann Да, все еще полностью актуально. Насколько мне известно, TS и его интерфейсы выглядят достаточно странно для тех, кто имеет Java-опыт, так что неудивительно.

ня я наткнулся на то, что, как я думал, не доставит мне неприятностей.

В Java и Spring я могу объявить два bean-компонента, которые реализуют данный интерфейс, в то время как в другом классе, где они вводятся, я работаю только с интерфейсом; на самом деле это то, что мне нравится в IoC: вам не обязательно знать, с каким объектом вы работаете, только этоДобрый.

Итак, в моей маленькой программе Angular2 / Typescript я пытался сделать то же самое:

webapp.module.ts:

... 
import { WebAppConfigurationService } from './app/services/webapp.configuration.service';

@NgModule({
  ...
  providers: [WebAppConfigurationService]
})
export class AppModule { }

tnsapp.module.ts:

...
import { TnsConfigurationService } from './services/tns.configuration.service';

@NgModule({
   ...
   providers: [TnsConfigurationService]
})
export class AppModule { }

Оба этих модуля используют другого поставщика:TnsConfigurationService или жеWebAppConfigurationService.

Тем не менее, эти два@Injectable Сервисы реализуют один и тот же интерфейс:

configuration.interface:

export interface IConfigurationService {
    ...
}

Наконец, в одном из моих компонентов я использую инъекцию, предоставленную одним из этих модулей, которые я показал вам в начале:

import { IConfigurationService } from './configuration.interface';

export class HeroesService {

    constructor(private configurationService: IConfigurationService) { }
}

Я ожидал, что этот последний компонент внедряется с правильным сервисом, хотя этот параметр только явно определяет интерфейс. Конечно, я получаю сообщение об ошибке («Ошибка: невозможно разрешить все параметры для HeroesService»)

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

Ответы на вопрос(1)

Ваш ответ на вопрос