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

Связанные карты