SKILL.md
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
- 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
- Check existing validation setup:
- If class already has a corresponding [OptionsValidator] partial class, skip it - Note any existing ValidateDataAnnotations() calls for removal later
- For each options class, create a partial validator class:
``csharp [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
- Register the validator in DI:
``csharp services.AddSingleton<IValidateOptions<MyOptions>, ValidateMyOptions>(); ` - Replace any existing ValidateDataAnnotations() calls - Ensure Microsoft.Extensions.Options` using directive is present
- Verify with build:
``bash dotnet build ``
- If build fails, check for:
- Missing partial keyword on validator class - Unsupported validation attributes - Missing package reference to Microsoft.Extensions.Options
- 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.Optionsversion 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