Project reference
StrangeIoC Cheatsheet
给产品和后台的最低 StrangeIoC 认知:能追链路、能约束 agent,不要求会从零写框架。
一句话
StrangeIoC 在本课里只需要理解成: Unity 对象通过 View / Mediator 进入业务系统,事件触发 Command,Model / Service 由 Context 绑定和注入。
最小链路
两层图:启动 Context,然后跑功能链路
ContextViewGameObject 上的入口
XxxContextmapBindings()
ViewUI 事件
Mediatordispatch
Command业务流程
Service / Model依赖注入
ContextView GameObject
→ new XxxContext(this)
→ addCoreComponents()
→ mapBindings()
├── injectionBinder: Model / Service
├── commandBinder: Event → Command
├── mediationBinder: View → Mediator
└── crossContextBridge: 跨 Context 事件
HappyMahjong 中的例子
| 概念 | 项目例子 | 文件 |
|---|---|---|
| ContextView | AppRoot | Hall/AppMain/AppRoot.cs |
| 主 Context | AppContext : MVCSContext | Hall/AppMain/AppContext.cs |
| 登录 ContextView | LoginRoot | Hall/Login/LoginRoot.cs |
| 登录 Context | LoginContext : MVCSContext | Hall/Login/LoginContext.cs |
| View / Mediator | LoginView → LoginMediator | Hall/Login/View/ |
| Command | LoginPlatformCommand, LoginTSDKCommand | Hall/Login/Controller/ |
| Model / Service | LoginModel, LoginService | Hall/Login/Model/, Hall/Login/Service/ |
读代码时按这个顺序
- 先找
*Context.cs:它告诉你 View、Mediator、Command、Model、Service 怎样绑定。 - 再找
*View.cs:它通常接 Unity UI 点击、输入、显示。 - 再找
*Mediator.cs:它把 View 事件转成框架事件。 - 再找
*Command.cs:它执行业务流程、调用 Service / Manager。 - 最后看
*Model.cs/*Service.cs:它们保存状态或对接网络、资源、SDK。
让 agent 改 StrangeIoC 代码的硬规则
- 不要修改
Assets/Scripts/Base/StrangeIoC/框架源码。 - 不要手动
new Mediator;View-Mediator 绑定应该在 Context 的mediationBinder。 - 不要手动
new Command;事件到 Command 的关系应该在commandBinder。 - 新增 View / Command 时,必须检查对应
*Context.cs是否需要绑定。 - 跨 Context 通信不要直接引用对象,先检查是否已有
crossContextBridge或 ModuleRegistry 方式。 - 不要为了一个小需求引入新的 DI 框架、Service Locator 或事件总线。
- 修改
AppContext.cs、GameContext.cs、SelectionContext.cs前要说明影响范围;这些是高风险绑定文件。
模块化项目的 IStrangeContext
HappyMahjong 还定义了模块接口 IStrangeContext,用于把模块绑定注入到主 Context。
public interface IStrangeContext
{
void InjectionBinder(ICrossContextInjectionBinder injectionBinder, MVCSContext context);
void CommandBinder(ICommandBinder commandBinder, MVCSContext context);
void MediationBinder(IMediationBinder mediationBinder, MVCSContext context);
void CrossContextBridgeBind(IBinder crossContextBridge, MVCSContext context);
void UnBindCrossContextBinder(IBinder crossContextBridge, ICrossContextInjectionBinder injectionBinder);
}
课堂解释够用:模块不是随便 new 出来的,它要通过 Context / ModuleRegistry 注册到容器里。
StrangeIoC 分析 prompt
先不要修改代码。请分析这个功能在 HappyMahjong StrangeIoC 中的绑定关系:
1. 所属 Context 是 AppContext、LoginContext、SelectionContext、GameContext 还是模块 IStrangeContext?
2. View → Mediator 绑定在哪个文件、哪一行?
3. 用户事件从 View 到 Mediator 后 dispatch 了什么事件?
4. 该事件绑定到哪些 Command?
5. Command 注入了哪些 Model / Service?
6. 是否通过 crossContextBridge 跨 Context 通信?
7. 如果要修改,最小修改文件是什么?哪些 Context 文件有高风险?
所有结论附文件路径。不确定处标注“推测”。不要改代码。