{"id":25549669,"url":"https://github.com/netlah/configuration","last_synced_at":"2025-07-14T11:09:55.022Z","repository":{"id":49984953,"uuid":"365419962","full_name":"NetLah/configuration","owner":"NetLah","description":"Configuration builder for dotnet Microsoft.Extensions.Configuration","archived":false,"fork":false,"pushed_at":"2024-05-17T11:17:49.000Z","size":219,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-05-17T17:06:15.928Z","etag":null,"topics":["appsettings","args","aspnetcore","command-line-arguments","configuration","configuration-builder","connection-string","dotnet","environments","extensions","ini","json","netcore","xml"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NetLah.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-05-08T04:40:20.000Z","updated_at":"2024-05-30T06:50:18.154Z","dependencies_parsed_at":"2024-03-20T11:55:24.740Z","dependency_job_id":"bb6185b8-6ffd-4ef4-b034-733a740b56e4","html_url":"https://github.com/NetLah/configuration","commit_stats":{"total_commits":68,"total_committers":1,"mean_commits":68.0,"dds":0.0,"last_synced_commit":"597081e44750489ad64e94c32ed98584ed8cf989"},"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NetLah%2Fconfiguration","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NetLah%2Fconfiguration/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NetLah%2Fconfiguration/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NetLah%2Fconfiguration/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NetLah","download_url":"https://codeload.github.com/NetLah/configuration/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248480434,"owners_count":21110936,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appsettings","args","aspnetcore","command-line-arguments","configuration","configuration-builder","connection-string","dotnet","environments","extensions","ini","json","netcore","xml"],"created_at":"2025-02-20T10:19:21.573Z","updated_at":"2025-04-11T21:01:42.906Z","avatar_url":"https://github.com/NetLah.png","language":"C#","readme":"# NetLah.Extensions.Configuration - .NET Library\n\n[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`.\n\n## Nuget package\n\n[![NuGet](https://img.shields.io/nuget/v/NetLah.Extensions.Configuration.svg?style=flat-square\u0026label=nuget\u0026colorB=00b200)](https://www.nuget.org/packages/NetLah.Extensions.Configuration/)\n\n## Build Status\n\n[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2FNetLah%2Fconfiguration%2Fbadge%3Fref%3Dmain\u0026style=flat)](https://actions-badge.atrox.dev/NetLah/configuration/goto?ref=main)\n\n## Getting started\n\nConsoleApp\n\n```C#\npublic static void Main(string[] args)\n{\n    var configuration = ConfigurationBuilderBuilder.Create\u003cProgram\u003e(args).Build();\n    var defaultConnectionString = configuration.GetConnectionString(\"DefaultConnection\");\n    Console.WriteLine($\"[TRACE] ConnectionString: {defaultConnectionString}\");\n}\n```\n\nFull API support\n\n```C#\nvar initConfig = new ConfigurationBuilder().Build();\nIConfigurationRoot configuration = new ConfigurationBuilderBuilder()\n    .WithConfiguration(initConfig)\n    .WithInMemory(new Dictionary\u003cstring, string?\u003e{ [\"Key:Sub\"] = \"Value\" })\n    .WithBasePath(\"C:/App/bin\")\n    .WithCurrentDirectory()\n    .WithBaseDirectory()\n    .WithAppSecrets\u003cProgram\u003e()\n    .WithAppSecrets(typeof(Program).Assembly)\n    .WithAddConfiguration(cb =\u003e cb.AddIniFile(\"appsettings.ini\", optional: true, reloadOnChange: true))\n    .WithEnvironment(\"Staging\")\n    .WithCommandLines(args)\n    .Build();\n```\n\n## Order of Precedence when Configuring\n\n- Reference\n\nhttps://devblogs.microsoft.com/premier-developer/order-of-precedence-when-configuring-asp-net-core/\n\nhttps://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/#default-configuration\n\n- Order of Precedence\n\n1. Host configuration from environment variables by prefix `DOTNET_` and `ASPNETCORE_`\n2. Chanined configuration (if any)\n3. In memory configuration (if any)\n4. appsettings.json using the JSON configuration provider\n5. appsettings.EnvironmentName.json using the JSON configuration provider\n6. Other extra configuration sources\n7. App secrets when the app runs in the `Development` environment\n8. Environment variables using the Environment Variables configuration provider\n9. Command-line arguments using the Command-line configuration provider\n\n## BasePath of configuration files\n\nThe application binary folder is default basePath for appsettings.json, appsettings.Production.json,etc. In case want to change current directory as basePath:\n\n```C#\nvar configuration = new ConfigurationBuilderBuilder()\n    .WithCurrentDirectory()\n    .Build();\n```\n\n## Environment name\n\n### `Production` environmentName by default if no host environmentName configuration\n\n`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:\n\n```txt\nASPNETCORE_ENVIRONMENT = Development\nDOTNET_ENVIRONMENT = Staging\n```\n\n### Specifying environmentName during build configuration\n\nSometime, 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.\n\n```C#\nvar configuration = ConfigurationBuilderBuilder.Create\u003cConfigurationBuilderBuilderTest\u003e()\n    .WithEnvironment(\"Testing\")\n    .Build();\n```\n\n## Add extra configuration sources\n\n```C#\nvar configuration = ConfigurationBuilderBuilder.Create\u003cProgram\u003e()\n    .WithAddConfiguration(cb =\u003e cb.AddIniFile(\"appsettings.ini\", optional: true, reloadOnChange: true))\n    .WithAddConfiguration(cb =\u003e cb.AddXmlFile(\"appsettings.xml\", optional: true, reloadOnChange: true))\n    .Build();\n```\n\nOr\n\n```C#\nvar configuration = ConfigurationBuilderBuilder.Create\u003cProgram\u003e()\n    .WithAddConfiguration(\n        cb =\u003e cb.AddIniFile(\"appsettings.ini\", optional: true, reloadOnChange: true)\n            .AddXmlFile(\"appsettings.xml\", optional: true, reloadOnChange: true)\n    )\n    .Build();\n```\n\n## ConnectionStringManager load from Configuration with database provider information\n\nReference at https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?#connection-string-prefixes\n\n### Support provider\n\n```C#\npublic enum DbProviders\n{\n    Custom,\n    SQLServer,\n    PostgreSQL,\n    MySQL,\n}\n```\n\nList of supported provider name\n\n```text\nSQLServer\nMssql\nSQLAzure\nSystem.Data.SqlClient\nMicrosoft.Data.SqlClient\n\nMySQL\nMySql.Data.MySqlClient\nMySqlConnector\n\nPostgreSQL\nNpgsql\nPostgres\n```\n\n### Configuration appsettings.json or environment\n\n```json\n{\n  \"ConnectionStrings\": {\n    \"DefaultConnection\": \"Server=localhost;Database=dbname;Integrated Security=True;\",\n    \"DefaultConnection_ProviderName\": \"System.Data.SqlClient\",\n    \"BlogConnection\": \"AccountEndpoint=https://7d48.documents.azure.com:443/;\",\n    \"BlogConnection_ProviderName\": \"Cosmos1\",\n    \"BlogConnection2_Cosmos\": \"AccountEndpoint=https://7d48.documents.azure.com:443/;\"\n  }\n}\n```\n\n### Basic usage:\n\n```C#\nIConfiguration configuration;\nvar connStrManager = new ConnectionStringManager(configuration);\nvar conn = connStrManager[\"defaultConnection\"];\nif (conn != null) {\n    if (conn.Provider == DbProviders.PostgreSQL) {\n        ...\n    } else if (conn.Provider == DbProviders.MySQL) {\n        ...\n    } else if (conn.Provider == DbProviders.SQLServer) {\n        ...\n    } else if (conn.Provider == DbProviders.Custom \u0026\u0026 conn.Custom == \"Cosmos1\") {\n        ...\n    }\n}\n```\n\n### Multi connectionNames:\n\n```C#\nvar conn = connStrManager[\"BlogConnection\", \"BlogConnection2\"];\nif (conn != null) {\n    if (conn.Provider == DbProviders.Custom \u0026\u0026 conn.Custom == \"Cosmos1\") {\n        ...\n    } else if (conn.Provider == DbProviders.Custom \u0026\u0026 conn.Custom == \"Cosmos\") {\n        ...\n    }\n}\n```\n\n### Troubleshooting appsettings, configuration and connection strings\n\nUse docker for troubleshooting\n\nhttps://github.com/NetLah/EchoServiceApi\n\nhttps://hub.docker.com/r/netlah/echo-service-api\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetlah%2Fconfiguration","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetlah%2Fconfiguration","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetlah%2Fconfiguration/lists"}