AI Core — модули приложения
AI-ориентированная схема загрузки модулей, путей к модулям и расширяемости приложения.
Карта модулей приложения
Справочная карта по Prism-модулям, динамическим модулям приложения, их загрузке и приватным ресурсам модулей.
Что здесь ищут
- Где регистрируются сервисы или aura-сущности.
- Как загрузить или проверить модули приложения.
- Как получить пути к приватным файлам модуля.
- Почему пакет или модуль добавляет API только после загрузки.
Общая модель
- Модули регистрируют сервисы, aura-сущности, редакторы, интеграции пакетов и runtime-инфраструктуру.
- Aura packs регистрируют пользовательские actions, triggers, overlays, редакторы переменных и узлы behavior tree.
- Опциональные SDK-пакеты могут добавлять расширения модулей или контейнера.
- Загрузкой модулей управляет общий для приложения
IEyeAurasModuleLoadPlan. EyeAuras и EyePad используют план «загрузить всё», а embedded-host заменяет его явным списком запрошенных имён модулей. modules.config— это подписанный инвентарь модулей. Он связывает имена модулей, пути, Prism-зависимости и identity сборок с конкретными payload, которые загрузчик может рассматривать. В нём могут быть сгенерированные hash/size metadata, но наличие этих полей само по себе не гарантирует проверку целостности каждого payload во всех вариантах загрузчика.- Инвентарь модулей отделён от намерения загрузки. Активный
IEyeAurasModuleLoadPlanрешает, какие записи нужны приложению; физическая форма payload и лицензирование решают, будут загружены обычные или зашифрованные bytes модуля.
Дождаться загрузки и найти ресурсы модуля
В сервисе приложения получите IAppModuleLoader через DI и наблюдайте
IsLoaded или WhenLoaded. Загрузку запускает host; повторно вызывать
LoadModules() из пользовательского скрипта не нужно. В реализации
20fd3d4 повторная инициализация отклоняется, а WhenLoaded выдаёт один
сигнал готовности и сохраняет его для поздних подписчиков. У LoadModules()
нет параметра отмены.
Для файлов рядом со сборкой модуля внедрите IAppModulePathResolver и вызовите
ResolvePath<TModule>(), где TModule — ваш зарегистрированный Prism-модуль.
Результат — DirectoryInfo каталога из Ref записи Prism, а не текущий
рабочий каталог процесса. Если записи модуля или каталога нет, resolver
бросает исключение. Эти API относятся к инфраструктуре приложения;
подключение SDK не регистрирует их в отдельном host автоматически.
Ограничить набор модулей своего host
EyeAurasModuleLoadPlan.LoadAll выбирает все настроенные модули.
EyeAurasModuleLoadPlan.Only(moduleNames) задаёт явный набор; имена сравниваются
без учёта регистра, пустые и повторяющиеся значения убираются. Передайте план
при настройке host до загрузки модулей; это не команда выгрузки уже
работающего приложения. Для готового embedded-host используйте
его настройку модулей.
Контракты загрузчика и resolver описаны по срезу EyeAuras 20fd3d4.
Поведение лицензируемых зашифрованных payload зависит от loader-компонентов
конкретной поставки.
API
Prism.Modularity.IModule— контракт реализации модуля.IAppModuleLoader— загружает модули приложения и показывает их состояние загрузки.IModuleLoader— общий контракт состояния загрузки.IEyeAurasModuleLoadPlan— список модулей, которые должен загрузить текущий host.IAppModulePathResolver— определяет директории для приватных ресурсов модуля.IAuraRegistrator— регистрирует aura-сущности во время инициализации модуля.
Что лучше делать
- Начинайте с регистраций модуля, если хотите найти пользовательские сущности.
- Для семантики регистрации и фабрик используйте
auras/entities.md. - Для регистраций из опциональных SDK-пакетов смотрите карты пакетов в
nuget/.
Чего лучше избегать
- Не предполагайте, что классы модулей содержат runtime-логику — часто они только связывают типы между собой.
- Не хардкодьте пути к ресурсам модуля, если для этого уже есть resolver.
Поисковые синонимы
- Prism module
- app module
- module loader
- module path
- module assets
- aura pack
- registration module