Является ли `поставщики: [ MyService ]` такими же, как `поставщики: [{обеспечить: MyComponent, useClass: MyComponent }]`
Я читаю ng-book
на угловой 2 ревизии 47 стр. 250 и там есть следующий отрывок:
Когда мы помещаем сам класс в список провайдеров следующим образом:
providers: [ MyService ]
Это говорит Angular, что мы хотим предоставлять единый экземпляр MyService всякий раз, когда MyService вводится. Поскольку этот шаблон очень распространен, сам класс является сокращенной записью для следующей эквивалентной конфигурации:
providers: [ { provide: MyComponent, useClass: MyComponent } ]
Это опечатка и что должно быть в виду:
providers: [
{ provide: MyService, useClass: MyService }
]
3 ответа
Это опечатка, так как вы не можете использовать компоненты в качестве провайдеров, вот официальные документы
Класс Provider и предоставленный объектный литерал. Мы записали массив поставщики следующим образом:
providers: [Logger]
На самом деле это сокращенное выражение для регистрации поставщика с использованием литерала объекта поставщика с двумя свойствами:
[{ provide: Logger, useClass: Logger }]
Первый - это токен, который служит ключом как для определения значения зависимости, так и для регистрации провайдера.
Второй - это объект определения провайдера, который мы можем рассматривать как рецепт для создания значения зависимости. Есть много способов создать значения зависимостей... и много способов написать рецепт
Да, это то же самое. Когда тип передается provide
а также useClass
то же самое, то это эквивалентно просто передать type
,
Просто намек. Предоставление компонента (MyComponent
) обычно не имеет смысла.
Да, они оба одинаковы. Когда вы пишете provider: [MyService] angular расширяет это до [{provide: MyService, useClass: MyService}], где первый параметр обеспечивает: MyService будет работать как токен внедрения зависимостей, который будет работать как ключ для поиска «MyService» и второй параметр useClass: MyService создаст зависимость от существующего класса сервиса MyService