Я читал документы по Angular 2.0 о инверсия зависимостей, и я также просмотрел некоторые онлайн-примеры а>.
Насколько я понимаю, декоратор @injectable
использует компилятор TypeScript с флагом emitDecoratorMetadata
для создания метаданных, которые используются для разрешения зависимостей. Возьмем, к примеру, следующий класс:
Компилятор TypeScript использует emitDecoratorMetadata
для объявления через метаданные, что класс DataService
имеет аргумент конструктора с типом Http
.
После того как мы объявили зависимости класса с помощью @Injectable
, мы можем указать, что его необходимо внедрить в некоторые компоненты, используя параметр Provides
в декораторах @App
или @Component
.
Я знаю о поведении emitDecoratorMetadata
и знаю, что он не может выдавать метаданные для интерфейсов. Поэтому я предполагаю, что не могу зависеть от IHttp
вместо Http
:
Верно ли мое предположение? Могу ли я зависеть от "Зависеть от абстракций. Не полагайтесь на конкреции». или это что-то, что в данный момент невозможно? Я предполагаю, что это будет исправлено, как только emitDecoratorMetadata
станет способным сериализовать интерфейсы.