.NET Configuration
The configuration system depends on configuration providers - the sources of configuration data.
Options
services.Configure<MyOptions>(Configuration.GetSection("MyOptions"));
The IOptions<T>
instance is registered as a singleton.
The class/record for our options needs to have properties that:
- are public
- have getters
- have setters (or non-null value if complex type)
- are not indexers
Lambda
We are able to customize Options in runtime:
services.Configure<MyOptions>(Configuration.GetSection("MyOptions"));
services.Configure<MyOptions>(options =>
{
options.Mode = Modes.Mode1;
});
The configuration system executes both operations. First, the IConfiguration
is read and then Mode
property is overwritten.
Without Options
Nuget packages:
- Microsoft.Extensions.Configuration;
- Microsoft.Extensions.Configuration.Files.Json
- Microsoft.Extensions.Configuration.Binder
Building
private static AppConfiguration GetConfiguration()
{
var rawConfig = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
return ConfigurationBinder.Get<AppConfiguration>(rawConfig);
}