Files
Workspace/Assets/Modules/ShrinkCommand.Integration.App/Runtime/ShrinkCommandAppComponent.cs
T
cneicy d74c2f08ca feat(packages): 内置 SDK 包并完善 ContextLoader 集成
- 将 ShrinkEventBus、ShrinkDataSaver 及其 EventBus 集成从 gitlink 转为仓库直接维护的完整 UPM 包,补齐运行时、编辑器工具、测试与文档
- 新增 Command 和 Network 的 App 集成组件,支持 ContextLoader 服务发布、可逆注销及 Network Loopback 生命周期管理
- 更新 Starter 与演示组合逻辑,缺失模块时可注册、已有兼容安装器时可覆盖,并补充宿主启动断言
- 升级内部包依赖与 Shared CodeGen 包定义,放宽 Integration.App 包的 Git 忽略规则
- 将独立服务器生成器改为基于已编译程序集的语义扫描,支持 partial、复杂泛型、命名冲突检测及模板 SHA-256 覆写保护
- 新增 Network 语义扫描、模板保护和 App 组件生命周期测试
- 新增真实 UPM 消费工程验证脚本,校验内部版本一致性、程序集加载及 EditMode 测试
- 重构当前架构文档并归档已完成的 Cordis 迁移与旧代码地图
2026-08-18 18:06:34 +08:00

50 lines
1.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#nullable enable
using System;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using ShrinkApp;
using ShrinkContext;
using ShrinkCommand;
namespace ShrinkCommand.Integration.App
{
/// <summary>
/// ShrinkCommand 的原生 Cordis 组件(阶段 3):
/// 提供 <c>shrink.service.command</c> 余效应键(默认命令服务),依赖者按键注入;
/// 与经典 ShrinkCommandAppInstallerModuleId "shrink.command")二选一使用(同键供给冲突保护)。
/// </summary>
public sealed class ShrinkCommandAppComponent : IShrinkComponent
{
public const string ServiceKey = "shrink.service.command";
public const string ModuleKey = "app.module.shrink.command";
private static readonly string[] ProvideKeys = { ModuleKey, ServiceKey };
public string Name => "shrink.command";
public IReadOnlyList<string> Inject => Array.Empty<string>();
public IReadOnlyList<string> Provide => ProvideKeys;
public UniTask ApplyAsync(ShrinkCtx ctx, object? config)
{
var service = ShrinkCommandRuntime.Default;
ctx.Set(ServiceKey, service);
ctx.Set(ModuleKey, Name);
if (config is ShrinkAppServices appServices)
{
var facade = new ShrinkCommandAppService(service);
appServices.Register(facade);
ctx.EffectInverse(() =>
{
appServices.TryUnregister(facade);
return UniTask.CompletedTask;
});
}
return UniTask.CompletedTask;
}
}
}