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 中的例子

概念项目例子文件
ContextViewAppRootHall/AppMain/AppRoot.cs
主 ContextAppContext : MVCSContextHall/AppMain/AppContext.cs
登录 ContextViewLoginRootHall/Login/LoginRoot.cs
登录 ContextLoginContext : MVCSContextHall/Login/LoginContext.cs
View / MediatorLoginView → LoginMediatorHall/Login/View/
CommandLoginPlatformCommand, LoginTSDKCommandHall/Login/Controller/
Model / ServiceLoginModel, LoginServiceHall/Login/Model/, Hall/Login/Service/

读代码时按这个顺序

  1. 先找 *Context.cs:它告诉你 View、Mediator、Command、Model、Service 怎样绑定。
  2. 再找 *View.cs:它通常接 Unity UI 点击、输入、显示。
  3. 再找 *Mediator.cs:它把 View 事件转成框架事件。
  4. 再找 *Command.cs:它执行业务流程、调用 Service / Manager。
  5. 最后看 *Model.cs / *Service.cs:它们保存状态或对接网络、资源、SDK。

让 agent 改 StrangeIoC 代码的硬规则

模块化项目的 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 文件有高风险?

所有结论附文件路径。不确定处标注“推测”。不要改代码。