mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-04-02 20:09:00 +08:00
- 实现AI-First配表方案,支持怪物、物品、技能等静态内容管理 - 集成YAML配置源文件与JSON Schema结构描述功能 - 提供一对象一文件的目录组织方式和运行时只读查询能力 - 实现Source Generator生成配置类型和表包装类 - 集成VS Code插件提供配置浏览、raw编辑和递归校验功能 - 开发YamlConfigSchemaValidator实现JSON Schema子集校验 - 支持嵌套对象、对象数组、标量数组与深层enum引用约束校验 - 实现跨表引用检测和热重载时依赖表联动校验机制
GFramework.SourceGenerators
Core 侧通用源码生成器模块。
Context Get 注入
当类本身是上下文感知类型时,可以通过字段特性生成一个手动调用的注入方法:
[GetService][GetServices][GetSystem][GetSystems][GetModel][GetModels][GetUtility][GetUtilities][GetAll]
上下文感知类满足以下任一条件即可:
- 类上带有
[ContextAware] - 继承
ContextAwareBase - 实现
IContextAware
生成器会生成 __InjectContextBindings_Generated(),需要在合适的生命周期中手动调用。在 Godot 中通常放在 _Ready():
using GFramework.SourceGenerators.Abstractions.Rule;
[ContextAware]
public partial class InventoryPanel
{
[GetModel]
private IInventoryModel _inventory = null!;
[GetServices]
private IReadOnlyList<IInventoryStrategy> _strategies = null!;
public override void _Ready()
{
__InjectContextBindings_Generated();
}
}
[GetAll] 作用于类本身,会自动扫描字段并推断 Model、System、Utility 相关的 GetX 调用;已显式标记字段的优先级更高。
Service 和 Services 绑定不会在 [GetAll] 下自动推断。对于普通引用类型字段,请显式使用 [GetService] 或
[GetServices],避免将非上下文服务字段误判为服务依赖。
[GetAll] 会跳过 const、static 和 readonly 字段。若某个字段本来会被 [GetAll] 推断为
Model、System 或 Utility 绑定,但因为是不可赋值的 static 或 readonly 字段而被跳过,生成器会发出警告提示该字段不会参与生成。