一、前言 在.Net Framework框架有專門獲取webconfig配置的方法供我們使用,但是在.Net Core或者.Net Standard中沒有可以直接使用的方法來獲取配置文件信息,下麵就來實現獲取配置信息。 二、獲取配置信息的實現 在.Net Core中,他的配置信息的載體是一個json ...
一、前言
在.Net Framework框架有專門獲取webconfig配置的方法供我們使用,但是在.Net Core或者.Net Standard中沒有可以直接使用的方法來獲取配置文件信息,下麵就來實現獲取配置信息。
二、獲取配置信息的實現
在.Net Core中,他的配置信息的載體是一個json文件,我們現在就計劃所有項目(包含.Net Framework和.Net Standard(.Net Core)框架)都是json文件作為配置的載體。
首先通過Nuget載入如下的包:
Install-Package Microsoft.Extensions.Configuration Install-Package Microsoft.Extensions.Configuration.Json Install-Package Microsoft.Extensions.DependencyInjection Install-Package Microsoft.Extensions.Options Install-Package Microsoft.Extensions.Options.ConfigurationExtensions
現在我們使用json配置文件的內容有一下格式:
{ "ConnectionStrings": { "CxyOrder": "Server=LAPTOP-AQUL6MDE\\MSSQLSERVERS;Database=CxyOrder;User ID=sa;Password=123456;Trusted_Connection=False;" }, "Appsettings": { "SystemName": "PDF .NET CORE", "Date": "2017-07-23", "Author": "PDF" }, "ServiceUrl": "https://www.baidu.com/getnews" }
創建PFTConfiguration.cs文件,代碼如下:
public class PFTConfiguration { /// <summary> /// PFTConfiguration.Configuration.GetConnectionString("CxyOrder"); /// PFTConfiguration.Configuration["ServiceUrl"]; /// PFTConfiguration.Configuration["Appsettings:SystemName"]; /// </summary> public static IConfiguration Configuration { get; set; } static PFTConfiguration() { Configuration = new ConfigurationBuilder() .Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true }) .Build(); } /// <summary> /// 獲取配置信息 /// </summary> /// <param name="path">json文件類型</param> /// <typeparam name="T">返回實體類型</typeparam> /// <param name="key">json關鍵字</param> /// <returns></returns> public static T GetAppsettings<T>(string key, string path) where T : class, new() { try { if (string.IsNullOrWhiteSpace(path)) { throw new Exception("解析配置錯誤,配置文件路徑為空"); } if (string.IsNullOrWhiteSpace(key)) { throw new Exception("解析配置錯誤,配置key為空"); } var config = new ConfigurationBuilder() .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) .Add(new JsonConfigurationSource { Path = path, ReloadOnChange = true }) .Build(); var appconfig = new ServiceCollection() .AddOptions() .Configure<T>(config.GetSection(key)) .BuildServiceProvider() .GetService<IOptions<T>>() .Value; return appconfig; } catch (Exception ex) { throw new Exception("解析配置(對象)異常", ex); } } /// <summary> /// 獲取配置信息 /// </summary> /// <param name="key">json關鍵字</param> /// <param name="path">json文件類型</param> /// <returns></returns> public static string GetAppsettings(string key, string path) { try { if (string.IsNullOrWhiteSpace(path)) { throw new Exception("解析配置錯誤,配置文件路徑為空"); } if (string.IsNullOrWhiteSpace(key)) { throw new Exception("解析配置錯誤,配置key為空"); } var config = new ConfigurationBuilder() .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) .Add(new JsonConfigurationSource { Path = path, ReloadOnChange = true, Optional = false }) .Build(); var appconfig = config.GetSection(key).Value; return appconfig; } catch (Exception ex) { throw new Exception("解析配置(字元串)異常", ex); } } } }
裡面定義了3種獲取方法
1、PFTConfiguration.Configuration["Appsettings:SystemName"] 文件路徑預設為appsettings.json,然後通過節點來獲取,這個方式有點類似於.Net Framework中獲取配置的方法
2、PFTConfiguration.GetAppsettings<T>(string key, string path),他是獲取指定配置文件,指定節點,以T對象的形式返回節點內容
3、PFTConfiguration.GetAppsettings(string key, string path),他是獲取指定配置文件,指定節點,以字元串的形式返回節點內容