@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»)
Теперь я не ожидаю легкого решения этого, поскольку это звучит как архитектурный недостаток. Но, может быть, кто-то может указать мне на альтернативный дизайн?