Отличный материал. Блестящая статья.
Официальные документы по-прежнему немного сбивают с толку (но этого и следовало ожидать, когда в нашем распоряжении есть мощная и гибкая система внедрения зависимостей). Документы говорят (не слово в слово!):
- CoreModule предполагается импортировать только в AppModule.
- CoreModule имеет конструктор @SkipSelf для предотвращения повторного импорта
- Но….CoreModuleпо-прежнему использует forRoot(), возвращая ModuleWithProviders
Пункт 3 официальной документации отличается от вашего процесса — вероятно, это вопрос предпочтений компании/разработчика. В документации говорится, что добавление forRoot() в CoreModule является соглашением. Я думаю, это сделано для того, чтобы разрешить передачу конфигов провайдерам, которые сами имеют декоратор @Optional()
, чтобы не было предупреждений, если не предоставлена зависимость.