IeuanWalker.AppSettings
2.0.0
Prefix Reserved
dotnet add package IeuanWalker.AppSettings --version 2.0.0
NuGet\Install-Package IeuanWalker.AppSettings -Version 2.0.0
<PackageReference Include="IeuanWalker.AppSettings" Version="2.0.0" />
<PackageVersion Include="IeuanWalker.AppSettings" Version="2.0.0" />
<PackageReference Include="IeuanWalker.AppSettings" />
paket add IeuanWalker.AppSettings --version 2.0.0
#r "nuget: IeuanWalker.AppSettings, 2.0.0"
#:package IeuanWalker.AppSettings@2.0.0
#addin nuget:?package=IeuanWalker.AppSettings&version=2.0.0
#tool nuget:?package=IeuanWalker.AppSettings&version=2.0.0
AppSettings

Automatically generates the registration code for IOptions and can validate them on startup using DataAnnotations or fluent validation.
How to use it?
- Install the NuGet package into your project.
Install-Package IeuanWalker.AppSettings
- Inherit the
IAppSettings
interface onto the class that models your IOptions
public class ConfirmationEmailSettings : IAppSettings
{
public required string Subject { get; set; }
}
Register the app settings
Once
IAppSettings
has been added to a class in your project, several extension methods will automatically be created. The extension method name convention is AddAppSettingsFrom + your assembly name, and the namespace is your assembly name.3.1 An extension method for
IServiceCollection
is created for all project types by defaultbuilder.Services.AddAppSettingsFromApiProjectNestedClassLibrary(builder.Configuration);
3.2 If your project is a backend/blazor project, then it will also have an extension method for
IHostApplicationBuilder
, allowing you to easily chain the registration in your progam.csbuilder.AddAppSettingsFromApiProject();
3.3 If it's a MAUI project, it will also have an extension method for
MauiAppBuilder
, allowing you to easily chain the registration in your MauiProgam.csbuilder.AddAppSettingsFromMauiProject();
Section name
By default, it maps the IOptions model to the section name based on the name of the model. For example, the following model -
public class ConfirmationEmailSettings : IAppSettings
{
public required string Subject { get; set; }
}
Would automatically map to the following app setting section -
{
"ConfirmationEmailSettings": {
"Subject": "Test subject"
}
}
If your model name and configuration section don't match or you want to bind a nested configuration, you can override this within your model by using the SectionName
attribute
[SectionName("ConfirmationEmail")]
public class ConfirmationEmailSettings : IAppSettings
{
public required string Subject { get; set; }
}
[SectionName("NestedConfiguration:ConfirmationEmail")]
public class ConfirmationEmailSettings : IAppSettings
{
public required string Subject { get; set; }
}
Validation
You can perform validation on startup using DataAnnotations or FluentValidation.
DataAnnotation
All you need to do is add a DataAnnotation attribute onto any property
public class ConfirmationEmailSettings : IAppSettings<ConfirmationEmailSettingsValidator>
{
[MinLength(5)]
public required string Subject { get; set; }
}
FluentValidation
To use FluentValidation you need to create an AbstractValidator
for your app settings model and add that validator to the IAppSettings
inheritance.
public class ConfirmationEmailSettings : IAppSettings<ConfirmationEmailSettingsValidator>
{
public required string Subject { get; set; }
}
sealed class ConfirmationEmailSettingsValidator : AbstractValidator<ConfirmationEmailSettings>
{
public ConfirmationEmailSettingsValidator()
{
RuleFor(x => x.Subject)
.NotEmpty()
.MinimumLength(5);
}
}
Use FluentValidation without the source generator
You can use FluentValidation without the source generator by not inheriting from IAppSettings
and using the extension method
public class ConfirmationEmailSettings
{
public required string Subject { get; set; }
}
sealed class ConfirmationEmailSettingsValidator : AbstractValidator<ConfirmationEmailSettings>
{
public ConfirmationEmailSettingsValidator()
{
RuleFor(x => x.Subject)
.NotEmpty()
.MinimumLength(5);
}
}
In your startup -
services.AddScoped<IValidator<ConfirmationEmailSettings>, ConfirmationEmailSettingsValidator>();
services.AddOptions<ConfirmationEmailSettings>()
.Configure(options => configuration.GetSection("FluentValidationWithValidationButNoSectionNameSettings").Bind(options))
.ValidateFluentValidation()
.ValidateOnStart();
What does the error look like?
If something fails validation as the application starts up, you will get an exception explaining the exact issue -
What does the generated code look like?
The generated code is just standard C#/ .NET APIs -
Left is the AppSettings model, Right is the generated code
Considerations
I do not recommend adding validation to a MAUI project as it can/ will slow startup. To prevent validation, add the DontValidate
attribute above your class.
[DontValidate]
public class MobileAppSettings : IAppSettings
{
public required string Subject { get; set; }
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- FluentValidation (>= 12.0.0)
- Microsoft.Extensions.Configuration (>= 9.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 9.0.0)
- Microsoft.Extensions.DependencyInjection (>= 9.0.0)
- Microsoft.Extensions.Options (>= 9.0.0)
- Microsoft.Extensions.Options.DataAnnotations (>= 9.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated | |
---|---|---|---|
2.0.0 | 151 | 6/23/2025 | |
1.0.0 | 85 | 6/20/2025 | |
0.0.1-Preview.9 | 86 | 6/20/2025 | |
0.0.1-Preview.8 | 92 | 6/20/2025 | |
0.0.1-Preview.7 | 94 | 6/20/2025 |