Files
Workspace/Assets/Modules/ShrinkContext.AppAdapter

ShrinkContext.AppAdapter

ShrinkApp ↔ ShrinkContext 的桥接层:把现有 IShrinkAppModuleInstaller 生态接入 Cordis 时空可组合性范式(阶段 2 过渡产物,方案见仓库根 CORDIS_MIGRATION.md)。

组成

类型 职责
ShrinkAppInstallerComponent 安装器 → 组件:DependsOn 映射为 app.module.* 注入键(依赖缺失等待而非抛错);发布模块键;apply = RegisterServices + InitializeAsync
ShrinkAppLoaderHost 加载器驱动的 ShrinkApp 宿主:发现安装器(注入覆盖可测试)、经 ShrinkContextLoader 增量协调、SetModuleDisabledAsync 运行中按模块开关、Active/WaitingModuleIds 状态查询、启动发布 ShrinkAppStartedEvent
ShrinkAppLoaderBootstrapper hostingMode == ContextLoader 时在 BeforeSceneLoad 自动创建常驻宿主,并把服务容器接回 ShrinkApp.ServicesClassic 模式完全不动

启用方式

ShrinkAppSettings.hostingMode 设为 ContextLoader(Inspector 或资产字段)。经典项目默认 ClassicHost,行为零变化。

// 运行中按模块开关(宿主与其余模块不重启)
var host = ShrinkAppLoaderBootstrapper.Instance!.Host;
await host.SetModuleDisabledAsync("shrink.network", true);

行为差异(对照经典 ShrinkAppHost

场景 ClassicHost LoaderHost
依赖缺失 排序期抛错 安装器保持 Waiting,依赖出现自动激活
重复 ModuleId 宿主级异常 构造期抛错(一致);运行期替换退化为供给冲突失败
运行中禁用模块 不支持(需重启) SetModuleDisabledAsync 增量协调,重启用会重新执行安装器初始化
ShrinkApp.IsRunning Host 驱动 ShrinkAppLoaderHost.IsRunning 为准(静态 IsRunning 为 false,过渡期已知差异)

已知边界

  • ShrinkAppServices 无注销能力:安装器停用不撤回已注册服务(重新启用会重跑 RegisterServices,同键覆盖)。
  • 配置变化走条目重建而非组件自决 diff(ShrinkContext.Core 加载器原型语义)。
  • 编排配置当前由代码构建条目;持久化配置资产(ScriptableObject/JSON)属后续切片。

测试

Tests/ 覆盖:安装器组件 5 项(依赖等待/次序/供给冲突/退役/配置缺失)+ LoaderHost 6 项(启动事件、运行中开关、设置级初始禁用、未知模块、重复 ModuleId、Shutdown)。