using Microsoft.Extensions.Configuration; namespace Core.Configurations { public class SmartConfigManager { private static IConfigurationBuilder _configurationBuilder; /// /// This AppConfigBuilder assumes that AppConfigEndpoint and AppConfigLabelFilter are configured as Settings on Azure for the Application that needs them. /// AppConfigEndpoint would look like this: Endpoint=https://config-dec-test.azconfig.io;Id=0-l9-s0:foo;Secret=somesecret/bar /// /// /// Path relative to the base path stored in Microsoft.Extensions.Configuration.IConfigurationBuilder.Properties of builder. /// public static IConfigurationBuilder AddSmartConfigBuilder(string localSettingsFile) { if (_configurationBuilder == null) { var envConfiguration = new ConfigurationBuilder() .AddEnvironmentVariables() .Build(); var appConfigEndpoint = envConfiguration["AppConfigEndpoint"]; var appConfigLabel = envConfiguration["AppConfigLabelFilter"]; _configurationBuilder = new ConfigurationBuilder(); if (!string.IsNullOrEmpty(appConfigEndpoint)) { _configurationBuilder .AddAzureAppConfiguration(options => { options.Connect(appConfigEndpoint); options.Select(keyFilter: "*", labelFilter: appConfigLabel); }) .AddEnvironmentVariables(); } else { _configurationBuilder.SetBasePath(Directory.GetCurrentDirectory()); _configurationBuilder.AddJsonFile(localSettingsFile, optional: false); } } return _configurationBuilder; } } }