Угловой - где предоставлять услуги?

Если я хочу изолировать сервис в одном модуле, я должен создать один корневой компонент для модуля и использовать providers на этот компонент ( как сказано в документах).

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

Но на следующем, документы говорит:

Не указывайте одноранговых поставщиков для всего приложения в общем модуле. Модуль с отложенной загрузкой, который импортирует этот общий модуль, создаст собственную копию службы.

Итак, мы не должны использовать providers из модулей для предоставления общих услуг. Итак, что мы должны использовать? AppModule providers? Должны ли мы предоставлять все общие услуги в AppModule? Когда мы должны использовать providers из функциональных модулей?

Похоже, что поставщики модулей являются общими, но вы не должны использовать их как общие. WTF?

2 ответа

Решение

Это угловой вопрос, который все еще открыт.

Не указывайте одноранговых поставщиков для всего приложения в общем модуле. Модуль с отложенной загрузкой, который импортирует этот общий модуль, создаст собственную копию службы.

Это относится только к лениво загруженным модулям. Поставщики в не лениво загруженных модулях всегда добавляются в корневую область приложения.

Лениво загруженные модули получают свою собственную корневую область, потому что корневой инжектор не может быть изменен позже (после того, как он был инициализирован).

Чтобы гарантировать, что все услуги предоставляются на корневом уровне, внедрите forRoot() метод и предоставлять услуги там. Затем импортируйте сервис на AppModule с imports: [MyModule.forRoot()]

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