using Microsoft.Extensions.Configuration; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; namespace Kean.Infrastructure.Database { /// /// 数据库配置管理 /// public static class Configuration { private static readonly ConcurrentDictionary drivers = new(); /// /// 配置数据库驱动 /// /// AppSetting 中的配置节 public static IDriver Configure(string config) { config ??= string.Empty; if (!drivers.ContainsKey(config)) { var configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .Build(); Dictionary param; if (config == string.Empty) { param = configuration .GetSection("Database") .GetChildren() .First() .GetChildren() .ToDictionary(i => i.Key, i => i.Value); } else { param = configuration .GetSection($"Database:{config}") .GetChildren() .ToDictionary(i => i.Key, i => i.Value); } drivers.TryAdd(config, Activator.CreateInstance(Type.GetType(param["DriverClass"]), param["ConnectionString"]) as IDriver); } return drivers[config]; } } }