SuperAPI AI 工具集

dotnet-source-gen-options-validation

编程与开发

查看项目

更新于 10-15 22:17

技能介绍

用途:把基于数据注解的选项(options)验证改为使用编译期源生成器,实现 AOT 兼容、无反射的启动期验证,并可用源生成验证替换 ValidateDataAnnotations()。

主要能力:为标注了数据注解的选项类生成 partial 验证器类,编译期生成验证逻辑。支持的验证特性包括 [Required]、[Range]、[RegularExpression]、[MaxLength]、[MinLength]、[Length]。

使用方式:先查找使用上述特性的选项类(常见于 *Options.cs 或 *Settings.cs);若已有对应 [OptionsValidator] partial 类则跳过。为每个选项类创建验证器: [OptionsValidator] public partial class Validate{OptionsClassName} : IValidateOptions<{OptionsClassName}> { } 验证器放在与选项类相同的命名空间。在 DI 中注册并移除已有 ValidateDataAnnotations() 调用: services.AddSingleton<IValidateOptions<MyOptions>, ValidateMyOptions>(); 确保引入 Microsoft.Extensions.Options。用 dotnet build 验证;若失败,检查是否缺少 partial 关键字、是否有不支持的验证特性、是否缺少包引用。

适用场景:准备 Native AOT 编译、消除反射验证开销、让验证错误在编译期而非运行期暴露、从 ValidateDataAnnotations() 迁移。

限制:需 .NET 8.0 或更高版本,Microsoft.Extensions.Options 8.0 或更高版本;ValidateDataAnnotations() 不再需要并应移除;[OptionsValidator] 特性触发源生成;验证在选项首次解析时的启动期运行;不支持的验证特性会产生编译器警告。