Я работаю над проверкой концепции Angular 8 (пока без Ivy), чтобы использовать ее в качестве основы для полного переписывания платформы. Одно из наших требований заключается в том, что мы должны иметь возможность загружать динамически настраиваемый код и изменять взаимодействие всего приложения без необходимости знать об этом основное приложение. Пользовательский код будет написан сторонними поставщиками и может содержать другие зависимости / стили кодирования / ... Мы хотели бы отделить их от нашей основной логики. У кого-нибудь есть опыт работы с такими вещами в угловых? Мне кажется, что Angular - это не то, что нужно для этого.
Я нашел текущее решение, но я не уверен на 100%, что оно будет масштабироваться. Кто-нибудь видит какие-либо проблемы с нынешним подходом?
Текущий подход заключается в том, что каждый компонент (который сам по себе является динамическим) использует службу для ограничения кода в компоненте и передачи всех событий / данных в службу (например, с помощью цикла событий или системной шины). Это оставляет только перезапись услуг как проблему. Мы будем лениво загружать пользовательскую логику, и к тому времени инжектор будет заморожен, поэтому мы создаем InjectionTokens и сохраняем их на карте. Мы делимся этой картой через наше приложение, поэтому мы можем перезаписать ее везде. Эти токены для инъекций создаются текущим инжектором (у ленивых загруженных есть разные), что обеспечивает доступность дополнительных пользовательских зависимостей. Когда нам нужен сервис, мы вызываем его через сервис, который проверяет карту. Я даже изменил несколько вещей, так что в большинстве случаев это выглядит как внедрение зависимостей.
Существуют ли более эффективные способы приблизить базовую реализацию перезаписи, не загружая ее повсюду, имея несколько приложений или ядро, зная об этом?