using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.Json; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Options; using System; using System.IO; namespace WIDESEA_Core.Utilities { public class ConfigUtil { private static IConfiguration _config; public static IConfiguration GetConfiguration { get { if (_config != null) return _config; var configBuilder = new ConfigurationBuilder() .SetBasePath(AppContext.BaseDirectory) .Add(new JsonConfigurationSource() { Path = "appsettings.json", ReloadOnChange = true, }); //var builder = new ConfigurationBuilder() //.SetBasePath(Directory.GetCurrentDirectory()) //.AddJsonFile("appsettings.json"); _config = configBuilder.Build(); return _config; } set { _config = value; } } public static string GetConnectionString(string key) { return GetConfiguration?.GetConnectionString(key); } public static IConfigurationSection GetSection(string key) { return GetConfiguration?.GetSection(key); } public static T GetAppSettings(string key, string configFileName = "appsettings.json", string basePath = "") where T : class, new() { //Microsoft.Extensions.Options.ConfigurationExtensions basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : Path.Combine(Directory.GetCurrentDirectory(), basePath); var configuration = new ConfigurationBuilder().SetBasePath(basePath) .AddJsonFile(configFileName, false, true) .Build(); var appconfig = new ServiceCollection() .AddOptions() .Configure(configuration.GetSection(key)) .BuildServiceProvider() .GetService>() .Value; return appconfig; } public static IConfigurationRoot GetJsonConfig(string configFileName = "appsettings.json", string basePath = "") { basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : Path.Combine(Directory.GetCurrentDirectory(), basePath); var configuration = new ConfigurationBuilder().SetBasePath(basePath) .AddJsonFile(configFileName, false, true) .Build(); return configuration; } public static IConfigurationRoot GetXmlConfig(string configFileName = "appsettings.xml", string basePath = "") { basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : Path.Combine(Directory.GetCurrentDirectory(), basePath); var configuration = new ConfigurationBuilder().AddXmlFile(config => { config.Path = configFileName; config.FileProvider = new PhysicalFileProvider(basePath); config.ReloadOnChange = true; }); return configuration.Build(); } public static IConfigurationRoot GetIniConfig(string configFileName = "appsettings.ini", string basePath = "") { basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : Path.Combine(Directory.GetCurrentDirectory(), basePath); var configuration = new ConfigurationBuilder().AddIniFile(config => { config.Path = configFileName; config.FileProvider = new PhysicalFileProvider(basePath); config.ReloadOnChange = true; }); return configuration.Build(); } } }