Я читал Angular 2.0 docs около инверсия зависимостей, и я также искал некоторые цифры online examples.Угловой 2.0 DI Могу ли я зависеть от абстракций?
Я понимаю, что декоратор @injectable
использует компилятор TypeScript с флагом emitDecoratorMetadata
для создания метаданных, которые используются для разрешения зависимостей. Возьмем, например, следующий класс:
машинописи компилятор использует emitDecoratorMetadata
объявить с помощью метаданных, что DataService
класс имеет конструктор аргумент с типом Http
.
После того, как мы объявили зависимости от класса, используя @Injectable
мы можем указать, что он должен быть введен в некоторые компоненты, используя Provides
опцию в @App
или @Component
декораторов.
Я знаю о поведении emitDecoratorMetadata
, и я знаю, что он не может испускать метаданные для интерфейсов. Поэтому, я полагаю, что я не могу зависеть от IHttp
вместо Http
:
Является ли мое предположение верно? Могу ли я зависеть от “Depend upon Abstractions. Do not depend upon concretions.” или это то, что невозможно в данный момент? Я предполагаю, что это будет исправлено, как только emitDecoratorMetadata
станет способным сериализовать интерфейсы.
Если я использую строку, как и где я сопоставляю строку с фактическим типом? –
Вместо того, чтобы просто добавлять тип к провайдерам в 'bootstrap()' или компонентах, используйте 'обеспечивать ('someName', {useClass: Http}]) и в конструкторе' @Inject ('someName') http: IHttp' –