Crip.Extensions.ConfigLocator
1.1.0
dotnet add package Crip.Extensions.ConfigLocator --version 1.1.0
NuGet\Install-Package Crip.Extensions.ConfigLocator -Version 1.1.0
<PackageReference Include="Crip.Extensions.ConfigLocator" Version="1.1.0" />
paket add Crip.Extensions.ConfigLocator --version 1.1.0
#r "nuget: Crip.Extensions.ConfigLocator, 1.1.0"
// Install Crip.Extensions.ConfigLocator as a Cake Addin #addin nuget:?package=Crip.Extensions.ConfigLocator&version=1.1.0 // Install Crip.Extensions.ConfigLocator as a Cake Tool #tool nuget:?package=Crip.Extensions.ConfigLocator&version=1.1.0
Configuration locator
ASP.NET Core bring cool feature like options pattern but did you feel sometimes that is difficult to trace from which
section in appsettings.json
file this options come from?
To reduce need register each options class separately and better traceability, this library does that automatically.
Getting started
Installation
Install Crip.Extensions.ConfigLocator NuGet package, or GitHub package
Prerequisites
Register all options providing assemblies where to search for classes with ConfigLocation
or ConfigValidate
attributes.
using Crip.Extensions.ConfigLocator;
builder.Services.AddConfigLocator(builder.Configuration, typeof(Program).Assembly);
Usage
Decorate options with ConfigLocation
attribute:
using Crip.Extensions.ConfigLocator;
[ConfigLocation("Path:To:Configuration:Section")]
public class MyOptions
{
public string Property { get; set; }
}
Obtain options within DI container:
public class MyController
{
public MyController(
IOptions<MyOptions> singleton,
IOptionsSnapshot<TOptions> snapshot,
IOptionsMonitor<TOptions> monitor)
{
//...
}
}
Validation
Option pattern supports multiple validation options. More about Options validation.
Data annotation validation
Define options with data annotation validation:
using Crip.Extensions.ConfigLocator;
using System.ComponentModel.DataAnnotations;
[ConfigLocation("MySection")]
[ConfigValidate]
public class MyOptions
{
[Required]
public string Foo { get; set; } = null!;
}
When MySection:Foo
is null
in appsettings.json
file, application will throw exception:
Microsoft.Extensions.Options.OptionsValidationException:
DataAnnotation validation failed for 'AttributeOptions' members: 'Foo' with the error: 'The Property field is required.'.
Custom option validator
Define custom validator and register configuration with it:
public class MyOptionsValidator : IValidateOptions<MyOptions>
{
public ValidateOptionsResult Validate(string? name, MyOptions options)
{
if (options.Foo == "Bar")
return ValidateOptionsResult.Fail("Options 'Foo' value cannot be an 'Bar'");
return ValidateOptionsResult.Success;
}
}
[ConfigLocation("MySection")]
[ConfigValidate<MyOptionsValidator>]
// if you under C# 11 or you like to provide more than one validator:
// [ConfigValidate(typeof(MyOptionsValidator))]
public class MyOptions
{
public string Foo { get; set; } = null!;
}
When MySection:Foo
is Bar
in appsettings.json
file, application will throw exception:
Microsoft.Extensions.Options.OptionsValidationException:
Options 'Foo' value cannot be an 'Bar'
Options as validatable object
As an addition your options class may implement IValidatableObject
interface for some custom inline validation.
Additional documentation
Limitations
This package does not support named options.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. 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. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.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 |
---|---|---|
1.1.0 | 199 | 7/5/2023 |
1.1.0-rc.1 | 87 | 7/5/2023 |
1.0.0 | 209 | 8/24/2022 |