Почему поставщики не должны быть экспортированы? - PullRequest
1 голос
/ 11 марта 2020

Интересно, почему провайдеры в Angular не должны экспортироваться, тогда как компоненты, директивы и каналы должны экспортироваться. Итак, следующий код работает отлично:

@NgModule({
  exports: [],
  providers: [
    GreeterService
  ]
})
export class SharedModule {
}

Если я пытаюсь добавить GreeterService в список экспорта, конечно, я получаю ошибку:

Can't export value GreeterService from SharedModule as it was neither declared nor imported!

Но почему это? Почему провайдеры работают напрямую, когда я импортирую модуль, в котором они предоставляются, а компоненты, директивы и каналы должны быть явно экспортированы?

1 Ответ

0 голосов
/ 11 марта 2020

В соответствии с фундаментальной концепцией сервисов

  • Сервисы снабжены метаданными @Injectable ()
  • , что отличает сервисы от компонентов / директивы и может использоваться поставщиками для динамического внедрения на необходимые компоненты.
  • Поставщик сообщает инжектору, как создать сервис. Вы должны сконфигурировать инжектор с провайдером, прежде чем этот инжектор сможет создать сервис (или предоставить любую другую зависимость).

Кроме того, сервисы являются одноуровневыми для приложения, совместно используют один и тот же экземпляр, тогда как компоненты / директивы может быть несколько

Подробнее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...