Agent skill
dotnet-source-gen-options-validation
Converts options validation to use the compile-time source generator. Use when the user wants AOT-compatible, reflection-free options validation.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/dotnet-source-gen-options-validation
Metadata
Additional technical details for this skill
- author
- Im5tu
- version
- 1.0
- repositoryUrl
- https://github.com/im5tu/dotnet-skills
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
- Ensuring validation errors surface at compile time rather than runtime
- 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:
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:
csharpservices.AddSingleton<IValidateOptions<MyOptions>, ValidateMyOptions>();- Replace any existing
ValidateDataAnnotations()calls - Ensure
Microsoft.Extensions.Optionsusing directive is present
- Replace any existing
-
Verify with build:
bashdotnet 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
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?