API 速查

August 7, 2026 · View on GitHub

本章提供运行时公开 API 的导航。它不是源码签名的机械复制,而是说明每组 API 的职责、所有权和常见调用位置。完整行为以当前版本源码为准。

命名空间与程序集

模块主要命名空间程序集
CoreIFrameworkIFramework
ServicesIFrameworkIFramework
UIIFramework.UIIFramework
EditorIFrameworkIFramework.UIEditor 程序集

业务程序集引用 IFramework 后,通常只需要:

using IFramework;
using IFramework.UI;

1. Game 与生命周期

Game

Game 是框架运行时入口,也是服务容器。业务通常继承它并挂到场景对象上。

成员用途
protected abstract void Startup()注册、进入服务并启动业务;由框架 Awake 调用
protected virtual void OnQuit()Game 退出前的业务清理扩展点
Quit()幂等退出;随后逆序退出服务并释放绑定
Use<T>(service, string)按接口类型和可选名称注册服务
GetService<T>(string)查找服务;不存在时返回 null
GetServices<T>()获取同一接口下的所有实例
EnterService<T>(string)进入已经注册的服务
Current当前 Launcher 持有的 Game
BindUpdate/UnBindUpdate绑定或解绑每帧更新
BindFixedUpdate/UnBindFixedUpdate绑定或解绑固定帧更新
BindLateUpdate/UnBindLateUpdate绑定或解绑 LateUpdate
BindOnApplicationFocus监听应用焦点变化
BindOnApplicationPause监听暂停变化
BindDisable监听 Launcher 禁用

绑定使用委托身份解绑。不要用两个内容相同但实例不同的匿名委托进行绑定和解绑。

private void OnFrame() { }

private void OnEnable() => Game.BindUpdate(OnFrame);
private void OnDisable() => Game.UnBindUpdate(OnFrame);

Launcher

Launcher 在运行时初始化阶段自动建立,并把 Unity PlayerLoop 转换成静态事件。一般由 Game 的静态方法间接使用,不需要业务手动创建。

2. 服务容器

IServiceProvider

API说明
GetService(Type, string)按运行时类型和名称查找
GetService<T>(string)泛型查找
GetRequiredService<T>(string)必需服务查找
EnterService<T>(string)进入已经注册的服务

IServiceCollection

IServiceProvider 基础上增加注册能力。大多数 UseXxx 扩展都返回 IServiceCollection,因此可以链式配置。

IService / ServiceBase

自定义服务推荐继承 ServiceBase

public sealed class InventoryService : ServiceBase
{
    protected override void OnUse(IServiceCollection services)
    {
        // 注册时建立覆盖整个服务生命周期的资源。
    }

    protected override void OnEnter(IServiceCollection services)
    {
        // 全部依赖注册后开始运行。
    }

    protected override void OnQuit(IServiceCollection services)
    {
        // 解绑事件、释放池或外部句柄
    }
}

注册实例不等于进入服务。约定顺序是先完成全部 UseXxx,再执行 EnterXxxEnterService<T>

GetRequiredService<T>(name) 支持命名查询。它在缺失时记录错误并返回 null,不会像部分 DI 容器一样抛出异常。

3. AsyncTask

创建和完成

API说明
new AsyncTask()创建手动控制的任务
AsyncTask.CreateFromPool()保留的兼容入口;当前返回独立任务对象
SetResult()成功完成
AsyncTask<T>.SetResult(T)带结果完成
IsCompleted是否已经结束
IsCanceled是否因框架取消异常结束
Exception当前异常

任务只能完成一次。完成后的重复 SetResultSetException 不会改变第一次完成结果。

组合

API结果
WhenAll(tasks)所有任务完成后结束
WhenAny(tasks)任意任务完成后结束
WhenAny<T>(tasks)返回最先完成任务的结果
Sequence(calls)按顺序调用任务工厂

把真正的工作包装为 Func<AsyncTask> 传给 Sequence。若提前创建所有任务,它们可能在进入序列前已经开始执行。

帧与时间

API说明
NextFrame(token)下一次框架 Update 完成
Delay(seconds, token)等待秒数;使用框架更新时间源
Repeat(interval, count, action, token)按间隔重复;count == -1 为无限
While(condition, interval, token)条件为真时持续等待
Util(condition, interval, token)等待条件变为真

边界语义:

  • Delay 的负数和零会立即完成;NaN 会产生参数异常。
  • Repeat(..., 0, ...) 不调用回调并立即完成。
  • Repeat 的有效次数是 -1 或大于等于 0
  • 已取消 Token 优先产生取消结果。

CancellationTokenSource

这是 IFramework 自有类型,不是 System.Threading.CancellationTokenSource

API说明
Token获取轻量 Token
Cancel()通知已注册任务取消
Dispose()释放注册集合
token.IsCancellationRequested查询取消状态
token.Register(task)任务随 Token 取消

框架异步系统面向 Unity 主线程调度,不应把它当作线程同步原语。

4. Events

API说明
Subscribe(string, Action<IEventArgs>)订阅同步消息
Subscribe<T>(IEventHandler)订阅类型消息
Subscribe(string, Func<T, AsyncTask>)订阅异步处理器
Publish(string, args)同步发布
Publish<T>(args)以类型名发布
PublishAsync(...)等待异步处理器
Wait(message, token)等待一次通知
Wait<T>(...)等待并取得事件参数
Notify(message)唤醒无参数等待者
Notify(message, arg)唤醒带参数等待者

Subscribe 返回 IDisposable,它就是订阅所有权。调用方必须在生命周期结束时释放。

5. Pool

ObjectPool

成员说明
Get()取出对象;池空时调用 Create()
Set(T)归还对象;成功返回 true
Clear()清空池内对象
count当前缓存数量
CreateNew()子类创建对象的扩展点
OnGet(T)取出后回调
OnSet(T)入池前验证/重置;返回 false 拒绝入池
OnClear(T)清理单个缓存项

重复归还同一实例会被拒绝。引用类型的 null 也不会进入池。

SimpleObjectPool

约束为 class, new()。类型实现 IPoolObject 后,可通过 OnGetOnSet 重置状态。

StaticPool

API说明
Get<T>() / Set<T>(value)按编译期类型使用静态对象池
SetByRealType(value)按对象真实运行时类型归还
GetArray<T>(length)获取精确长度数组
Set<T>(array)归还数组
CreateDisposable<T>()取得随 Dispose 自动归还的值包装
CreateDisposableArray<T>(length)取得数组包装

数组池按精确长度匹配。引用类型或包含引用字段的数组在归还时会清空元素,避免延长对象生命周期。

6. Value 与注入

API说明
UseValues()注册 Value 服务
Values()取得 Value 服务
Register(Type, value, name)注册值
Get(Type, name)读取值
Register<T>(value, name)泛型注册
Register<T>(factory)注册按需创建工厂
Get<T>(name)泛型读取
Inject(object)给标记成员注入

注入目标实现 IInjectAble,字段使用 [Inject]。当前 InjectAttribute 只允许标记字段,不支持属性;名称为空时按类型匹配,使用命名值时注册端和注入端必须一致。

7. MVC 与 State

MVC

API说明
UseMvc(models, ctrls)注册模型和控制器集合
EnterMvc()注入并进入 MVC 服务
Mvc()获取 MVC 服务
GetModel<T>()读取模型
GetCtrl<T>()读取控制器

Mvc()IMvcService 查询,与 UseMvc 的注册类型一致。

State

API说明
UseState(states)注册状态集合
EnterState<T>()进入状态服务并切到初始状态
State()获取状态服务
SwitchState<T>()切换状态
FindState<T>()查找状态实例
GetCurrentState()当前状态

状态实例实现 IGameState,负责自己的进入、更新和退出行为。不要在同一次状态切换回调中递归触发无边界切换。

8. Pref 与 GameObjectPool

Pref

API说明
UsePref(converter, loader)注册序列化转换器与存储加载器
Pref()获取服务
Load<T>(key)加载对象
Save<T>(key, value)保存对象
PrefContext<T>把 key 与值绑定为上下文

IPrefConverter 负责对象与存储格式转换,IPrefLoader 负责实际读写。密钥、版本迁移和原子写入由具体实现负责。

GameObjectPool

API说明
UseGameObjectPool(asset)注册池和资源适配器
GameObjectPool()获取服务
Prepare(key)准备指定 key 的资源和内部池
Get<T>(key)获取 GameObjectView 实例
Set(view)归还实现 IPoolAbleGameObjectView 的 View
Clear(path)清理指定资源池
ClearAll()清理全部缓存

IGameObjectPoolAsset 隔离资源加载和销毁。池化对象可实现 IPoolAbleGameObjectView 接收取出/归还回调。

9. RedDot 与 Undo

RedDot

API说明
UseRedTree()注册红点树
RedTree()获取服务
CreateRedDot<T>(path, init)创建逻辑节点
CreateRedActiveDot(path, gameObject)创建控制 GameObject 激活状态的节点
FreshDots()批量刷新脏节点

路径表示层级关系。修改叶子状态后应在合适的批处理边界执行刷新。

Undo

API说明
UseUndo(name)注册命名 Undo 服务
Undo(name)获取服务
Subscribe<T>(init, redo)从静态池取得记录、初始化并写入历史
Subscribe(record, redo)直接写入记录;可控制是否立即 Redo
Undo()撤销
Redo()重做

Undo 记录可实现池重置协议。记录内容必须包含恢复前后状态所需的全部信息,不能依赖后来会变化的临时引用。

10. UI

注册与查找

API说明
game.UseUI(layerData, collection, bridge, delegate, canvas, name)注册 UI 服务
game.UI(name)获取命名 UI 服务
Show(path)显示面板;必要时加载
Hide(path) / Close(path)发起隐藏/关闭;实际操作延迟到下一帧
HideAsync(path) / CloseAsync(path)等待 View 完成过渡
GetIsPanelOpen(path)是否已经加载该面板
FindPanel(path)获取已加载 UIPanel
GetVisibleList()获取当前可见 path 列表

IUIDelegate

LoadPanelAsyncDestroyPanel 负责资源边界,其余回调用于记录请求、显示状态、层顶变化、全屏数量和生命周期。适配器不应在回调里再次无条件调用同一 UI 操作,否则容易递归。

IViewBridge / UIView

Bridge 把字符串 path 映射到具体 View:

  • Subscribe/UnSubscribe 建立或移除映射。
  • OnLoad/OnShow/OnHide/OnClose 转发生命周期。
  • OnBecameVisible/OnBecameInvisible 表示因层级遮挡造成的可见性变化。
  • OnHideAsync/OnCloseAsync 把等待操作交给 View。

UIView 默认会立即完成异步隐藏/关闭 operation。自定义 View 覆盖动画方法后,必须在所有结束分支完成传入的 operation,否则调用方会一直等待。

WidgetPool

用于一个面板内大量重复 Item。创建池时传入 Prefab、父节点和 View 工厂;使用结束必须释放池或回收所有活动项。

UI 工具

类型用途
UnityEventHelper绑定 UnityEvent,并把解绑挂到对象生命周期
Empty4Raycast无渲染射线接收区域
PolygonRaycastImage多边形射线命中
ImagePolygonMeshEffect减少透明区域网格开销
UIPanel.AdaptNotchScreen安全区/异形屏适配

11. Log 与通用工具

API说明
Log.L普通日志
Log.W警告
Log.E错误
Log.Exception异常
Log.A条件断言
Log.logger替换日志适配器

发行构建是否输出日志由项目配置与日志实现共同决定。高频循环不要构造仅用于关闭日志的字符串。

Singleton<T> 提供纯 C# 单例,MonoSingleton<T> 提供 MonoBehaviour 单例。二者都代表全局所有权,应明确初始化、场景切换和销毁行为,避免用单例隐藏模块依赖。