dotnet-source-gen-options-validation

📁 im5tu/dotnet-skills 📅 Feb 4, 2026
2
总安装量
2
周安装量
#70489
全站排名
安装命令
npx skills add https://github.com/im5tu/dotnet-skills --skill dotnet-source-gen-options-validation

Agent 安装分布

claude-code 2
mcpjam 1
kilo 1
junie 1
windsurf 1
zencoder 1

Skill 文档

Convert options validation to use the compile-time source generator, enabling AOT-compatible, reflection-free validation at startup.

When to Use

  • Preparing application for Native AOT compilation
  • Eliminating reflection-based validation overhead
  • Source generation happens at compile time; value validation runs at startup
  • Migrating from ValidateDataAnnotations() to source-generated validation

Steps

  1. Find options classes with data annotations:

    • Search for classes using [Required], [Range], [RegularExpression], [MaxLength], [MinLength], [Length]
    • These are typically in files matching *Options.cs or *Settings.cs
  2. Check existing validation setup:

    • If class already has a corresponding [OptionsValidator] partial class, skip it
    • Note any existing ValidateDataAnnotations() calls for removal later
  3. For each options class, create a partial validator class:

    [OptionsValidator]
    public partial class Validate{OptionsClassName} : IValidateOptions<{OptionsClassName}>
    {
    }
    
    • Place the validator in the same namespace as the options class
    • The source generator will implement the validation logic at compile time
  4. Register the validator in DI:

    services.AddSingleton<IValidateOptions<MyOptions>, ValidateMyOptions>();
    
    • Replace any existing ValidateDataAnnotations() calls
    • Ensure Microsoft.Extensions.Options using directive is present
  5. Verify with build:

    dotnet build
    
  6. If build fails, check for:

    • Missing partial keyword on validator class
    • Unsupported validation attributes
    • Missing package reference to Microsoft.Extensions.Options
  7. Report results:

    • List all validator classes created
    • List all DI registrations added
    • Confirm build status

Supported Validation Attributes

  • [Required] – Property must have a value
  • [Range] – Numeric value within specified range
  • [RegularExpression] – String matches regex pattern
  • [MaxLength] – Maximum length for strings/collections
  • [MinLength] – Minimum length for strings/collections
  • [Length] – Exact or range length constraint

Notes

  • Requires .NET 8.0 or higher
  • Requires Microsoft.Extensions.Options version 8.0 or higher
  • ValidateDataAnnotations() is NOT needed and should be removed
  • The [OptionsValidator] attribute triggers source generation
  • Validation runs at startup when options are first resolved
  • Unsupported attributes will produce compiler warnings