# 源码生成器概览
GFramework 源码生成器基于 Roslyn 编译器平台,自动生成常用的样板代码,提高开发效率并减少错误。
## 核心特性
### ⚡ 自动代码生成
- **日志代码生成** - 自动生成日志字段和方法调用
- **枚举扩展生成** - 为枚举类型生成实用扩展方法
- **规则代码生成** - 根据规则定义生成验证代码
- **性能优化** - 编译时生成,运行时零开销
### 🎯 智能识别
- **特性驱动** - 通过特性标记触发生成
- **上下文感知** - 理解代码语义和结构
- **类型安全** - 生成的代码完全类型安全
- **错误预防** - 编译时检查,避免运行时错误
## 核心生成器
### 日志生成器
- **[LogAttribute](/source-generators/logging-generator)** - 自动生成日志字段
- **ContextAwareAttribute** - 生成上下文感知代码
- **性能监控** - 自动生成方法执行时间记录
### 枚举扩展生成器
- **[EnumExtensions](/source-generators/enum-extensions)** - 生成枚举实用方法
- **字符串转换** - 枚举与字符串的双向转换
- **描述获取** - 从特性中提取枚举描述
### 规则生成器
- **[RuleGenerator](/source-generators/rule-generator)** - 生成验证规则代码
- **业务规则** - 基于规则定义生成验证逻辑
- **数据验证** - 自动生成数据完整性检查
## 使用场景
源码生成器适用于需要大量样板代码的场景:
- **日志记录** - 统一的日志格式和级别管理
- **枚举处理** - 频繁的枚举转换和操作
- **数据验证** - 复杂的业务规则验证
- **性能监控** - 方法执行时间跟踪
## 安装配置
```xml
```
## 快速示例
### 日志生成器
```csharp
[Log] // 自动生成 Logger 字段
public partial class PlayerController : IController
{
// 生成的代码:
// private ILogger _logger;
// public ILogger Logger => _logger ??= LoggerFactory.Create(GetType());
public void Attack()
{
Logger.Info("Player attacking"); // 直接使用生成的 Logger
// 业务逻辑...
}
}
```
### 枚举扩展生成
```csharp
[GenerateEnumExtensions] // 生成枚举扩展方法
public enum PlayerState
{
[Description("空闲")]
Idle,
[Description("移动中")]
Moving,
[Description("攻击中")]
Attacking
}
// 生成的扩展方法:
// PlayerStateExtensions.GetDescription()
// PlayerStateExtensions.FromString()
// PlayerStateExtensions.GetAllValues()
```
### 规则生成器
```csharp
[GenerateValidationRules] // 生成验证规则
public class PlayerData
{
[Required]
[StringLength(50, MinimumLength = 3)]
public string Name { get; set; }
[Range(0, 100)]
public int Health { get; set; }
[Email]
public string Email { get; set; }
}
// 生成的验证方法:
// PlayerDataValidator.Validate()
// PlayerDataValidator.ValidateName()
// PlayerDataValidator.ValidateHealth()
```
## 生成器配置
### 全局配置
```xml
Debug
true
true
```
### 特性配置
```csharp
[Log(LogLevel = LogLevel.Debug, IncludeCallerInfo = true)]
[GenerateEnumExtensions(CamelCase = true)]
[GenerateValidationRules(ThrowOnInvalid = true)]
```
## 性能优势
### 编译时生成
- **零运行时开销** - 代码在编译时生成
- **类型安全** - 编译时类型检查
- **IDE 支持** - 生成的代码完全支持 IntelliSense
### 代码质量
- **一致性** - 统一的代码风格和模式
- **错误减少** - 自动生成减少手写错误
- **维护性** - 集中管理样板代码逻辑
## 学习路径
建议按以下顺序学习源码生成器:
1. **[日志生成器](/source-generators/logging-generator)** - 基础的日志代码生成
2. **[枚举扩展](/source-generators/enum-extensions)** - 枚举处理自动化
3. **[规则生成器](/source-generators/rule-generator)** - 复杂验证逻辑生成
## 调试生成的代码
### 查看生成的代码
```xml
true
Generated
```
### 调试配置
```csharp
// 在调试时查看生成的代码
#if DEBUG
// 生成的代码会被写入到指定目录
#endif
```
## 最佳实践
### 1. 合理使用特性
```csharp
// ✅ 好的做法:在需要的地方使用
[Log]
public class ImportantService { }
// ❌ 避免过度使用
[Log] // 不是每个类都需要日志
public class SimpleDataClass { }
```
### 2. 配置优化
```xml
Warning
Debug
```
### 3. 性能考虑
```csharp
// ✅ 生成器适合复杂场景
[GenerateValidationRules] // 复杂验证逻辑
public class BusinessEntity { }
// ❌ 简单场景手动实现更高效
public class SimpleConfig
{
public string Name { get; set; }
// 简单属性不需要生成器
}
```
## 下一步
- [深入了解日志生成器](/source-generators/logging-generator)
- [学习枚举扩展生成](/source-generators/enum-extensions)
- [掌握规则生成器](/source-generators/rule-generator)
- [查看生成器 API](/api-reference/generators-api)