microsoft-extensions-configuration

Microsoft.Extensions.Options patterns including IValidateOptions, strongly-typed settings, validation on startup, and the Options pattern for clean configuration management.

By aaronontheweb · 511 installs

npx skills add aaronontheweb/dotnet-skills --skill microsoft-extensions-configuration

Source repository · Upstream listing

Microsoft.Extensions Configuration Patterns When to Use This Skill Use this skill when: Binding configuration from appsettings.json to strongly typed classes Validating configuration at application startup (fail fast) Implementing complex validation logic for settings Designing configuration classes that are testable and maintainable Understanding IOptions<T , IOptionsSnapshot<T , and IOptionsMonitor<T Reference Files [advanced patterns.md](advanced patterns.md): Validators with dependencies, named options, complete production example (AkkaSettings), and testing validators Why Configuration Validation Matters The Problem: Applications often fail at runtime due to misconfiguration missing connection strings, invalid URLs, out of range values. These failures happen deep in business logic, far from where configuration is loaded. The Solution: Validate configuration at startup. If invalid, fail immediately with a clear error message. Pattern 1: Basic Options Binding Define a Settings Class Bind from Configuration Consume in Services Pattern 2: Data Annotations Validation For simple validation rules, use Data Annotations: Enable Data Annotations Validation Key Point: .ValidateOnStart() is critical. Without it, validation only runs when the options are first accessed. Pattern 3: IValidateOptions<T for Complex Validation Data Annotations work for simple rules, but complex validation requires IValidateOptions<T : Scenario Data Annotations IValidateOptions Required field Yes Yes Range check Yes Yes Cross property validation No Yes Conditional validation No Yes External service checks No Yes Dependency injection in validator No Yes Implementing IValidateOptions Register the Validator Order matters: Data Annotations run first, then IValidateOptions validators. All failures are collected together. See [advanced patterns.md](advanced patterns.md) for validators with dependencies, named options, and a complete production example. Pattern 4: Options Lifetime Interface Lifetime Reloads on Change Use Case IOptions<T Singleton No Static config, read once IOptionsSnapshot<T Scoped Yes (per request) Web apps needing fresh config IOptionsMonitor<T Singleton Yes (with callback) Background services, real time updates IOptionsMonitor for Background Services Pattern 5: Post Configuration Modify options after binding but before validation: Anti Patterns to Avoid 1. Manual Configuration Access 2. Validation in Constructor 3. Forgetting ValidateOnStart 4. Throwing in IValidateOptions Summary Principle Implementation Fail fast .ValidateOnStart() Strongly typed Bind to POCO classes Simple validation Data Annotations Complex validation IValidateOptions<T Cross property rules IValidateOptions<T Environment aware Inject IHostEnvironment Testable Validators are plain classes