2015-05-27 2 views
0

Я действительно изучаю Angular 2, и мне было интересно, как команда делает, чтобы обрабатывать инъекцию зависимости в своем компоненте?Angular 2 di container

Объяснение

Кажется, что NG2 основан на ES7 декоратора через машинопись. Фактически, декоратор класса является «запуском» (я имею в виду, код декоратора) интерпретируется только тогда, когда класс подвергается инстанцированию.

Итак, как команда справляется с обработкой компонентов или услуг?

Пример

Глядя на этот код из документации:

class AComponent { 
    constructor(@Inject(MyService) aService:MyService) {} 
} 

Инъекция производится, когда конструктор класса называется. Это означает, что у MyService есть определенные декораторы/конкретные метаданные (например, @Injectable), которые позволяют ему вводить нет?

В этом случае это означает, что существует реестр служб, список из которых доступен через аннотацию @Inject.

Но это означает, что структура может создать и загрузить этот репозиторий в выполнении (это важное слово), которое не соответствует с декоратора вызовом (при создании экземпляра для класса аннотаций)?

Означает ли это, что каждый компонент/услуги, вводимые инъекцией, инстинктивны как минимум один раз? Или существует ли что-то еще для ввода или выполнения какого-либо декоратора во время выполнения, чтобы заполнить реестр/контейнер службы?

Спасибо за заранее

+1

Я нашел это объяснение весьма полезным: http://blog.thoughtram.io/angular/2015/05/18/dependency -injection-in-angular-2.html – Donal

+0

Спасибо. Знаете ли вы, стоит ли вводить все инъекционные классы внутри одного и только одного инжектора? – mfrachet

ответ

2

На самом деле, класс декоратор «запуск» (я имею в виду, код декоратора) только интерпретируется, когда инстанциирован класс.

Инжектор да. Но Component нет, и это то, что вам не хватает.

declare var Component: any; 
declare var Inject: any; 
declare type MyService = any; 
declare var MyService: any; 

@Component 
class AComponent { 
    constructor(@Inject(MyService) aService:MyService) {} 
} 

Вызов @Component будет производиться на definition время. Это позволит угловому регистрировать компонент. Когда кто-то попросит упомянутый компонент, то Constructor @Inject выполнит, и, таким образом, произойдет угловой DI.

+0

Эта система действительно потрясающая. Вы знаете, как инжектор работает в ng2? – mfrachet

+1

'Вы знаете, как инжектор работает в ng2? Да, как внешний наблюдатель, хотя :) – basarat

Смежные вопросы