GFramework/GFramework.SourceGenerators
GeWuYou ee2936e0a2 refactor(generator): 重构上下文获取生成器的代码结构
- 将 ContextSymbols 的创建提取为独立方法 CreateContextSymbols
- 将源码生成逻辑提取为独立方法 GenerateSources
- 将绑定收集逻辑提取为独立方法 CollectBindings
- 将显式绑定添加逻辑提取为独立方法 AddExplicitBindings
- 将推断绑定添加逻辑提取为独立方法 AddInferredBindings
- 将绑定推断检查逻辑提取为独立方法 CanInferBinding
- 优化了代码组织结构和可读性
2026-03-28 11:47:59 +08:00
..

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] 作用于类本身,会自动扫描字段并推断对应的 GetX 调用;已显式标记字段的优先级更高。