Где лучше всего зарегистрировать провайдеров Angular 2
Я написал три сервиса для приложения Angular 2 с конфигурацией, в которой два внедряются в третий и используются там. После импорта двух (все три украшены @Injectable()
), Я все еще получил ошибку неизвестного поставщика.
Чтобы решить эту проблему, я попытался поместить внедренные сервисы в массив поставщиков модулей, который работал. Это лучший подход?
На англоязычной документации показан список инъекционных препаратов на уровне компонентов. Могу ли я просто поместить все инъекционные препараты в массив поставщиков модулей?
Похоже, это упростит настройку приложения, так как все настроено в центральном месте для каждого модуля. Нет поиска зависимостей от компонента к компоненту.
2 ответа
Да, поместите это в @NgModule.providers
если служба предназначена для области приложения (синглтон). Только добавьте это к @Component.providers
если служба должна иметь компонентную область1 (каждый компонент должен получить свой собственный экземпляр)
1 - см. Также иерархические инжекторы
Это зависит от вашего требования, какие услуги вы хотите.
Синглтон сервис
Если вы хотите использовать singleton service
Вы можете разместить свой сервис где-нибудь в центральной области. Вы будете думать, что вы должны использовать / разместить сервис в AppModule
, Но для достижения истинного одноэлементного шаблона / экземпляра вы должны поместить / объявить службу в CoreModule - пожалуйста, проверьте, как использовать CoreModule, а затем импортируйте CoreModule
в AppModule
,
Служба множественных экземпляров
Если вы объявите Serivce в @Component decorator
из компонентов, у вас будут разные экземпляры службы в разных компонентах.