dotnet-source-gen-options-validation
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.csor*Settings.cs
- Search for classes using
-
Check existing validation setup:
- If class already has a corresponding
[OptionsValidator]partial class, skip it - Note any existing
ValidateDataAnnotations()calls for removal later
- If class already has a corresponding
-
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
-
Register the validator in DI:
services.AddSingleton<IValidateOptions<MyOptions>, ValidateMyOptions>();- Replace any existing
ValidateDataAnnotations()calls - Ensure
Microsoft.Extensions.Optionsusing directive is present
- Replace any existing
-
Verify with build:
dotnet build -
If build fails, check for:
- Missing
partialkeyword on validator class - Unsupported validation attributes
- Missing package reference to
Microsoft.Extensions.Options
- Missing
-
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
Weekly Installs
2
Repository
im5tu/dotnet-skillsFirst Seen
Feb 4, 2026
Security Audits
Installed on
claude-code2
mcpjam1
kilo1
junie1
windsurf1
zencoder1