aemarcoToolboxAppOptions 8.0.3
See the version list below for details.
dotnet add package aemarcoToolboxAppOptions --version 8.0.3
NuGet\Install-Package aemarcoToolboxAppOptions -Version 8.0.3
<PackageReference Include="aemarcoToolboxAppOptions" Version="8.0.3" />
paket add aemarcoToolboxAppOptions --version 8.0.3
#r "nuget: aemarcoToolboxAppOptions, 8.0.3"
// Install aemarcoToolboxAppOptions as a Cake Addin #addin nuget:?package=aemarcoToolboxAppOptions&version=8.0.3 // Install aemarcoToolboxAppOptions as a Cake Tool #tool nuget:?package=aemarcoToolboxAppOptions&version=8.0.3
aemarcoToolboxAppOptions
<a href=https://www.nuget.org/packages/aemarcoToolboxAppOptions><img src="https://buildstats.info/nuget/aemarcoToolboxAppOptions"></a><br/>
Overview
This package provides a opinionated approach to the Options pattern described in the Microsoft docs. With minimal setup, all the Option classes will be registered in the IOC container and mapped to the IConfiguration source.
- Automatic mapping of sections to classes (convention driven, but can be adjusted)
- Beside registering the interfaces from Microsoft, registers the class itself as well (singleton)
- Registers also interfaces which you put on the settings class
- Allows text transformations between IConfiguration and the settings class
- Option to use fluent validation on settings
- Option to validate settings during startup (on by default, opt-out in options)
Get Started
During startup of the app
{
services.AddConfigOptionsUtils(config);
}
Create your class representing your options
{
public class MySettings : ISettingsBase
{
public string? Text { get; set; }
public bool Enable { get; set; }
}
}
In appsetting.json (or other IConfiguration source)
{
"MySettings": {
"Text": "SomeText",
"Enable": true
}
}
StringTransformation
String transformations will be executed in the order defined in the setup process. You could define your own, but PlaceholderTransformation is built in already.
{
services.AddConfigOptionsUtils(
config,
x => x
.AddStringTransformation(new PlaceholderTransformation());
}
PlaceholderTransformation does resolve placeholders {{{...}}} through the entire IConfguration by Key. That maybe usefull when piecing together file or url path.
{
"Message": "Hello world!",
"MySettings": {
"Text": "The message is {{{Message}}}",
"Enable": true
}
}
Fluent Validation
Just define your Validators in the assemblies where setting classes are defined. The tool will register them, and use them if present. By default, Validation takes place at startup.
{
services.AddConfigOptionsUtils(
config,
x => x
.EnableValidationOnStartup(false); //on by default
}
Setting classes in multiple assemblies
The tool relies on assembly scanning during the setup. If your option classes are in other assemblies, you may pass one of the types as assembly marker, and/or use the assemblies itself.
{
services.AddConfigOptionsUtils(
config,
x => x
.AddAssemblyMarker(typeof(MySettings))
// and/or
.AddAssemblies(someAssemblies));
}
Mapping Path
By default, the class name is exactly matched to the root level of the configuration. You may define your own path in the settings class
{
[SettingsPath("Settings")]
public class MySettings : ISettingsBase
{
public string? Text { get; set; }
public bool Enable { get; set; }
}
}
would map to
{
"Settings": {
"Text": "SomeText",
"Enable": true
}
}
You could even do it nested, just use the colon seperated path as you would with GetSection().
{
[SettingsPath("Settings:Nested")]
public class MySettings : ISettingsBase
{
public string? Text { get; set; }
public bool Enable { get; set; }
}
}
would map to
{
"Settings": {
"Nested":{
"Text": "SomeText",
"Enable": true
}
}
}
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. |
-
net8.0
- aemarcoExtensions (>= 8.0.3)
- FluentValidation.DependencyInjectionExtensions (>= 11.11.0)
- Microsoft.Extensions.Configuration.Binder (>= 9.0.0)
- Microsoft.Extensions.Configuration.Json (>= 9.0.0)
- Microsoft.Extensions.Hosting.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Options (>= 9.0.0)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on aemarcoToolboxAppOptions:
Package | Downloads |
---|---|
aemarcoWpfTools
c# wpf tools collection |
|
aemarcoWebTools
c# web tools collection |
|
aemarcoConsoleTools
c# console tools collection |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
8.0.4 | 81 | 11/17/2024 |
8.0.3 | 87 | 11/17/2024 |
5.0.21 | 87 | 11/16/2024 |
5.0.20 | 105 | 10/20/2024 |
5.0.19 | 93 | 10/19/2024 |
5.0.18 | 120 | 10/19/2024 |
5.0.17 | 104 | 10/13/2024 |
5.0.16 | 93 | 10/12/2024 |
5.0.6 | 87 | 10/6/2024 |
5.0.5 | 94 | 10/2/2024 |
5.0.4 | 85 | 10/1/2024 |
5.0.3 | 88 | 9/22/2024 |
5.0.2 | 187 | 9/16/2024 |
4.0.9 | 109 | 9/15/2024 |
4.0.8 | 101 | 9/8/2024 |
4.0.7 | 83 | 9/8/2024 |
4.0.6 | 88 | 9/8/2024 |
4.0.5 | 83 | 9/8/2024 |
4.0.2 | 110 | 9/8/2024 |
3.1.27 | 102 | 9/8/2024 |
3.1.26 | 108 | 9/7/2024 |
3.1.25 | 104 | 9/7/2024 |
3.1.24 | 101 | 9/7/2024 |
3.1.23 | 91 | 9/1/2024 |
3.1.22 | 99 | 9/1/2024 |
3.1.21 | 119 | 6/16/2024 |
3.1.20 | 99 | 5/31/2024 |
3.1.19 | 91 | 5/20/2024 |
3.1.18 | 101 | 5/10/2024 |
3.1.17 | 125 | 4/12/2024 |
3.1.16 | 122 | 4/4/2024 |
3.1.15 | 137 | 3/22/2024 |
3.1.11 | 122 | 3/19/2024 |
3.1.10 | 128 | 2/16/2024 |
3.1.7 | 146 | 2/11/2024 |
3.1.6 | 131 | 2/11/2024 |
3.1.5 | 123 | 2/11/2024 |
3.1.4 | 119 | 2/11/2024 |
3.0.18 | 178 | 1/29/2024 |
3.0.17 | 108 | 1/29/2024 |
3.0.16 | 107 | 1/27/2024 |
3.0.15 | 107 | 1/27/2024 |
3.0.8 | 110 | 1/27/2024 |
3.0.7 | 169 | 1/13/2024 |
2.0.18 | 186 | 1/4/2024 |
2.0.17 | 195 | 1/1/2024 |
2.0.16 | 190 | 12/27/2023 |
2.0.15 | 179 | 12/26/2023 |
2.0.14 | 186 | 12/26/2023 |
2.0.13 | 160 | 12/25/2023 |
2.0.11 | 151 | 12/23/2023 |
2.0.10 | 183 | 12/16/2023 |
2.0.9 | 168 | 12/15/2023 |
2.0.8 | 187 | 12/14/2023 |
2.0.7 | 178 | 12/13/2023 |
2.0.5 | 197 | 12/11/2023 |
2.0.4 | 184 | 12/11/2023 |
2.0.2 | 205 | 12/10/2023 |
1.9.2 | 188 | 12/10/2023 |
1.8.4 | 201 | 12/10/2023 |
1.8.3 | 221 | 12/9/2023 |
1.8.2 | 190 | 12/9/2023 |
1.1.28 | 229 | 11/27/2023 |
1.1.27 | 194 | 11/26/2023 |
1.1.26 | 215 | 11/18/2023 |
1.1.25 | 195 | 11/17/2023 |
1.1.24 | 249 | 10/30/2023 |
1.1.23 | 210 | 10/29/2023 |
1.1.22 | 218 | 10/22/2023 |
1.1.21 | 230 | 10/17/2023 |
1.1.20 | 250 | 9/16/2023 |
1.1.19 | 317 | 8/27/2023 |
1.1.18 | 241 | 7/31/2023 |
1.1.17 | 271 | 7/16/2023 |
1.1.16 | 264 | 7/9/2023 |
1.1.15 | 284 | 7/8/2023 |
1.1.14 | 282 | 7/5/2023 |
1.1.13 | 256 | 6/29/2023 |
1.1.12 | 271 | 5/1/2023 |
1.1.11 | 437 | 3/5/2023 |
1.1.10 | 395 | 3/3/2023 |
1.1.9 | 422 | 2/28/2023 |
1.1.7 | 448 | 2/26/2023 |
1.1.6 | 411 | 2/26/2023 |
1.1.5 | 288 | 2/26/2023 |
1.1.3 | 272 | 2/25/2023 |