Biwen.AutoClassGen 是一个代码生成工具库,通过源代码生成器(Source Generator)技术自动创建常用代码模式,简化开发流程,提高工作效率。
- DTO自动生成:自动从实体类生成DTO对象,并创建映射扩展方法
- 请求对象生成:快速生成具有相同字段的请求对象族,减少重复工作
- AOP装饰器模式:自动实现装饰器模式,无需手动编写大量样板代码
- 依赖注入自动注册:通过简单的特性标记,自动注册服务到DI容器
- 版本信息生成:自动生成程序集版本信息
- 元数据生成:自动生成程序集元数据
- 代码分析与修复:提供多种代码分析规则和自动修复功能
- 枚举描述生成:根据枚举值自动生成描述信息(
Description
,Display
),方便在UI中显示
<ItemGroup>
<PackageReference Include="Biwen.AutoClassGen.Attributes" Version="x.x.x" />
<PackageReference Include="Biwen.AutoClassGen" Version="x.x.x" PrivateAssets="all" />
</ItemGroup>
通过简单的特性标记,自动生成DTO类和映射方法:
[AutoDto(typeof(User))] // 或使用 C# 11+ 的泛型特性: [AutoDto<User>]
public partial class UserDto
{
// 属性会自动从User类生成
}
轻松实现AOP装饰器模式:
[AutoDecor<LoggingDecorator>]
public interface IUserService
{
Task<User> GetUserAsync(int id);
}
自动注册服务到DI容器:
[AutoInject<IUserService>(ServiceLifetime.Scoped)]
public class UserService : IUserService
{
// 实现代码
}
自动生成程序集版本信息,支持git版本号:
Console.WriteLine($"Version: {XXX.Generated.Version}");
Console.WriteLine($"Version: {XXX.Generated.AssemblyMetadata}");
[AutoDescription]
public enum UserStatus
{
[Description("正常")]
Normal,
[Description("禁用")]
Disabled,
[Display(Name = "已删除")]
Deleted
}
// 生成的描述信息
Console.WriteLine(UserStatus.Normal.Description()); // 输出: 正常
Console.WriteLine(UserStatus.Deleted.Description()); // 输出: 已删除
以下是每个功能的详细使用说明:
该库提供了一系列代码分析器,帮助您编写更规范、更高质量的代码:
GEN001
: 检查接口继承关系,确保能正确生成实现类GEN011
: 防止生成类与接口名称冲突GEN021
: 建议使用统一的命名空间以提高代码组织性GEN031
: 提示使用[AutoGen]
特性实现自动生成
GEN041
: 检测重复的[AutoDto]
特性标注GEN042
: 禁止在抽象类上使用[AutoDto]
特性GEN044
: 防止[AutoDto]
引用外部程序集的类GEN045
: 确保标记[AutoDto]
的类声明为 partial
GEN043
: 确保被[AutoDecor]
标记的类型具有public访问级别
GEN050
: 检查文件是否包含必要的头部注释信息GEN051
: 确保异步方法名称以Async结尾GEN052
: 推荐使用C# 10的文件作用域命名空间声明GEN053
: 确保源代码文件使用UTF-8编码
本库提供多个自动代码修复功能,帮助您快速修正代码问题:
- ✨ 自动添加缺失的文件头部注释
- 🔄 将异步方法名称规范化(添加Async后缀)
- 🎯 自动应用
[AutoGen]
特性 - 🔍 移除重复的特性标注
- 📝 转换为文件作用域命名空间
- 🛠 更多代码修复持续添加中...
以下是一些使用Biwen.AutoClassGen的优秀项目:
- Biwen.QuickApi - 快速API开发框架
如果您的项目正在使用本库,欢迎通过PR将您的项目添加到此列表!
欢迎提交Pull Request来改进这个项目!无论是修复bug、添加新功能,还是完善文档,我们都非常感谢您的贡献。
本项目采用MIT协议开源,详见 LICENSE 文件。