ModuleManager
Перший етап обробки метаданих, які ви передаєте у декораторах модулів (таких як @rootModule чи @featureModule), відбувається у сервісі ModuleManager.
Він рекурсивно сканує усі модулі, починаючи з кореневого модуля, пропускає опції декораторів через ModuleNormalizer і зберігає зібрані нормалізовані метадані у вигляді об'єктів NormalizedModuleMeta.
Сканування та нормалізація метаданих
Процес ініціалізації починається з виклику moduleManager.scanAppModule(rootModule):
- Нормалізація кореневого модуля: Опції декоратора кореневого модуля передаються в
ModuleNormalizer, який перевіряє їхню коректність та формує нормалізовані метадані. - Рекурсивне сканування залежностей:
ModuleManagerобходить усі модулі, вказані в масивахimportsтаexports, формуючи повну карту модулів застосунку. - Обробка mixin-декораторів: Якщо модуль використовує розширені mixin-декоратори (наприклад,
@restModuleчи кастомні@mixin*), запускаються відповідні module mixins для нормалізації розширених метаданих. - Валідація та перевірка цілісності: Перевіряється коректність імпортів/експортів та відсутність конфліктів у конфігураціях модулів.
Динамічне маніпулювання модулями
Після завершення сканування, ModuleManager надає API для огляду та програмного редагування метаданих модулів до того, як AppInitializer збере провайдери та розширення:
getMetadata(modRefId): Повертає нормалізовані метадані вказаного модуля.setImports(modRefId, ...imports): Додає імпорти модулів у нормалізоване представлення модуля без прямого редагування його декоратора.removeImport(modRefId, importToFind): Видаляє певні імпорти з нормалізованих метаданих модуля.
Цей механізм дозволяє гнучко налаштовувати застосунок під час тестування (наприклад, підміняти модулі чи провайдери) або динамічно підключати фіч-модулі під час завантаження.