https://github.com/netlah/configuration
Configuration builder for dotnet Microsoft.Extensions.Configuration
https://github.com/netlah/configuration
appsettings args aspnetcore command-line-arguments configuration configuration-builder connection-string dotnet environments extensions ini json netcore xml
Last synced: 8 months ago
JSON representation
Configuration builder for dotnet Microsoft.Extensions.Configuration
- Host: GitHub
- URL: https://github.com/netlah/configuration
- Owner: NetLah
- License: mit
- Created: 2021-05-08T04:40:20.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2024-05-17T11:17:49.000Z (almost 2 years ago)
- Last Synced: 2024-05-17T17:06:15.928Z (almost 2 years ago)
- Topics: appsettings, args, aspnetcore, command-line-arguments, configuration, configuration-builder, connection-string, dotnet, environments, extensions, ini, json, netcore, xml
- Language: C#
- Homepage:
- Size: 214 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# NetLah.Extensions.Configuration - .NET Library
[NetLah.Extensions.Configuration](https://www.nuget.org/packages/NetLah.Extensions.Configuration/) is a library which contains a set of reusable classes for build configuration with environment. These library classes are `ConfigurationBuilderBuilder`, `CertificateLoader` and `ConnectionStringManager`.
## Nuget package
[](https://www.nuget.org/packages/NetLah.Extensions.Configuration/)
## Build Status
[](https://actions-badge.atrox.dev/NetLah/configuration/goto?ref=main)
## Getting started
ConsoleApp
```C#
public static void Main(string[] args)
{
var configuration = ConfigurationBuilderBuilder.Create(args).Build();
var defaultConnectionString = configuration.GetConnectionString("DefaultConnection");
Console.WriteLine($"[TRACE] ConnectionString: {defaultConnectionString}");
}
```
Full API support
```C#
var initConfig = new ConfigurationBuilder().Build();
IConfigurationRoot configuration = new ConfigurationBuilderBuilder()
.WithConfiguration(initConfig)
.WithInMemory(new Dictionary{ ["Key:Sub"] = "Value" })
.WithBasePath("C:/App/bin")
.WithCurrentDirectory()
.WithBaseDirectory()
.WithAppSecrets()
.WithAppSecrets(typeof(Program).Assembly)
.WithAddConfiguration(cb => cb.AddIniFile("appsettings.ini", optional: true, reloadOnChange: true))
.WithEnvironment("Staging")
.WithCommandLines(args)
.Build();
```
## Order of Precedence when Configuring
- Reference
https://devblogs.microsoft.com/premier-developer/order-of-precedence-when-configuring-asp-net-core/
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/#default-configuration
- Order of Precedence
1. Host configuration from environment variables by prefix `DOTNET_` and `ASPNETCORE_`
2. Chanined configuration (if any)
3. In memory configuration (if any)
4. appsettings.json using the JSON configuration provider
5. appsettings.EnvironmentName.json using the JSON configuration provider
6. Other extra configuration sources
7. App secrets when the app runs in the `Development` environment
8. Environment variables using the Environment Variables configuration provider
9. Command-line arguments using the Command-line configuration provider
## BasePath of configuration files
The application binary folder is default basePath for appsettings.json, appsettings.Production.json,etc. In case want to change current directory as basePath:
```C#
var configuration = new ConfigurationBuilderBuilder()
.WithCurrentDirectory()
.Build();
```
## Environment name
### `Production` environmentName by default if no host environmentName configuration
`ConfigurationBuilderBuilder` will detect `EnvironmentName` by add configuration environment variables with prefix `DOTNET_` and `ASPNETCORE_`. If no environment variable set, `Production` will use by default. Example of environment variables:
```txt
ASPNETCORE_ENVIRONMENT = Development
DOTNET_ENVIRONMENT = Staging
```
### Specifying environmentName during build configuration
Sometime, we cannot set the environmentName using environment variable, or we need different environment configuration build lik in unit test project, we can specific the environmentName.
```C#
var configuration = ConfigurationBuilderBuilder.Create()
.WithEnvironment("Testing")
.Build();
```
## Add extra configuration sources
```C#
var configuration = ConfigurationBuilderBuilder.Create()
.WithAddConfiguration(cb => cb.AddIniFile("appsettings.ini", optional: true, reloadOnChange: true))
.WithAddConfiguration(cb => cb.AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true))
.Build();
```
Or
```C#
var configuration = ConfigurationBuilderBuilder.Create()
.WithAddConfiguration(
cb => cb.AddIniFile("appsettings.ini", optional: true, reloadOnChange: true)
.AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true)
)
.Build();
```
## ConnectionStringManager load from Configuration with database provider information
Reference at https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?#connection-string-prefixes
### Support provider
```C#
public enum DbProviders
{
Custom,
SQLServer,
PostgreSQL,
MySQL,
}
```
List of supported provider name
```text
SQLServer
Mssql
SQLAzure
System.Data.SqlClient
Microsoft.Data.SqlClient
MySQL
MySql.Data.MySqlClient
MySqlConnector
PostgreSQL
Npgsql
Postgres
```
### Configuration appsettings.json or environment
```json
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=dbname;Integrated Security=True;",
"DefaultConnection_ProviderName": "System.Data.SqlClient",
"BlogConnection": "AccountEndpoint=https://7d48.documents.azure.com:443/;",
"BlogConnection_ProviderName": "Cosmos1",
"BlogConnection2_Cosmos": "AccountEndpoint=https://7d48.documents.azure.com:443/;"
}
}
```
### Basic usage:
```C#
IConfiguration configuration;
var connStrManager = new ConnectionStringManager(configuration);
var conn = connStrManager["defaultConnection"];
if (conn != null) {
if (conn.Provider == DbProviders.PostgreSQL) {
...
} else if (conn.Provider == DbProviders.MySQL) {
...
} else if (conn.Provider == DbProviders.SQLServer) {
...
} else if (conn.Provider == DbProviders.Custom && conn.Custom == "Cosmos1") {
...
}
}
```
### Multi connectionNames:
```C#
var conn = connStrManager["BlogConnection", "BlogConnection2"];
if (conn != null) {
if (conn.Provider == DbProviders.Custom && conn.Custom == "Cosmos1") {
...
} else if (conn.Provider == DbProviders.Custom && conn.Custom == "Cosmos") {
...
}
}
```
### Troubleshooting appsettings, configuration and connection strings
Use docker for troubleshooting
https://github.com/NetLah/EchoServiceApi
https://hub.docker.com/r/netlah/echo-service-api