using System.Collections.Concurrent; using Microsoft.Extensions.Configuration; namespace Business.Core.Configuration { public static class AppConfigurations { private static readonly ConcurrentDictionary ConfigurationCache; static AppConfigurations() { ConfigurationCache = new ConcurrentDictionary(); } public static IConfigurationRoot Get(string path, string environmentName = null) { var cacheKey = path + "#" + environmentName; return ConfigurationCache.GetOrAdd( cacheKey, _ => BuildConfiguration(path, environmentName) ); } private static IConfigurationRoot BuildConfiguration(string path, string environmentName = null) { var builder = new ConfigurationBuilder() .SetBasePath(path) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); if (!environmentName.IsNullOrWhiteSpace()) { builder = builder.AddJsonFile($"appsettings.{environmentName}.json", optional: true); } builder = builder.AddEnvironmentVariables(); return builder.Build(); } } }