Где лучше всего зарегистрировать провайдеров Angular 2

Я написал три сервиса для приложения Angular 2 с конфигурацией, в которой два внедряются в третий и используются там. После импорта двух (все три украшены @Injectable()), Я все еще получил ошибку неизвестного поставщика.

Чтобы решить эту проблему, я попытался поместить внедренные сервисы в массив поставщиков модулей, который работал. Это лучший подход?

На англоязычной документации показан список инъекционных препаратов на уровне компонентов. Могу ли я просто поместить все инъекционные препараты в массив поставщиков модулей?

Похоже, это упростит настройку приложения, так как все настроено в центральном месте для каждого модуля. Нет поиска зависимостей от компонента к компоненту.

2 ответа

Да, поместите это в @NgModule.providers если служба предназначена для области приложения (синглтон). Только добавьте это к @Component.providers если служба должна иметь компонентную область1 (каждый компонент должен получить свой собственный экземпляр)


1 - см. Также иерархические инжекторы

Это зависит от вашего требования, какие услуги вы хотите.

Синглтон сервис

Если вы хотите использовать singleton service Вы можете разместить свой сервис где-нибудь в центральной области. Вы будете думать, что вы должны использовать / разместить сервис в AppModule, Но для достижения истинного одноэлементного шаблона / экземпляра вы должны поместить / объявить службу в CoreModule - пожалуйста, проверьте, как использовать CoreModule, а затем импортируйте CoreModule в AppModule,

Служба множественных экземпляров

Если вы объявите Serivce в @Component decorator из компонентов, у вас будут разные экземпляры службы в разных компонентах.

Другие вопросы по тегам