Angular, поставщик или инжектор, который создает экземпляр службы - PullRequest
0 голосов
/ 24 октября 2018

В Angular Document, , где говорят "провайдер создает экземпляр службы" ,

Перед тем, как Angular сможет внедрить его в HeroesComponent, вы должны сделать HeroService доступным для системы внедрения зависимостей, как вы это сделаете ниже.Вы делаете это путем регистрации поставщика. Поставщик - это то, что может создавать или предоставлять услугу ;в этом случае он создает класс HeroService для предоставления услуги.

, но это говорит: «инжектор создает экземпляр службы»

Инжектор отвечает за создание экземпляров службы и внедрение их в такие классы, как HeroListComponent.

, поэтому после прочтения документа у меня возникает вопрос: какой из них будетсоздать экземпляр службы, поставщика или инжектора?

Этот вопрос меня сильно смутил.Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Если вы хотите использовать службу, вам нужно несколько вещей.

1) Создайте службу
2) Получите ее в компоненте, в который вы хотите добавить ее в качестве зависимости.
3) Единственный способ, которым angular может создать экземпляр службы, - это если вы «предоставите» некоторую инструкцию Angular.Это то, что вы делаете в провайдерах.

A provider is an instruction to the DI system on how to obtain a value for a dependency. Most of the time, these dependencies are services that you create and provide.

См. Эту ссылку в угловой документации ниже: https://angular.io/guide/providers

0 голосов
/ 24 октября 2018

ИМО, вы можете увидеть 3 блока

  • инжектор
  • провайдер
  • фабрика

Как простой пу, заводской экземплярclass (ваш сервис), ваш провайдер здесь, чтобы выбрать, какую фабрику использовать, реальную фабрику классов или макет, а инжектор - это просто DI, который решает использовать провайдера

, поэтому на уровне «компонентов», да, этоинжектор, который "создает" вашу службу, просто чтобы прояснить, что вам не нужно расставлять точки самостоятельно.

0 голосов
/ 24 октября 2018

Я понял это так: использование массива providers модуля NgModule на самом деле создает провайдера.

Например, посмотрите на переопределение провайдеров:

providers: [{ provide: MyService, useClass: MyServiceMock }]

Как видите, вы действительно создаете провайдера из этого массива.

Я полагаю, что написание этого "стандартного" способа - это просто ярлык для создания провайдера.

Инжектор, с другой стороны, это тот, который создает экземпляры класса, которые будут внедрены как зависимости в ваши функции.

Другими словами, провайдером будет услуга, отмеченная @Injectable, а инжектором будет тот, кто вызывает new MyService().

(Опять же, я не уверен насчет моего объяснения, просто я так понял).

...