1.AppSettingExtension類的實現
/// <summary> /// by lhc 2018.04.11 /// 讀取自定義的appsetting配置文件 @"~/App_Data/AppSettingsConfig.xml" /// </summary> public class AppSettingExtension { private readonly static object lockObj = new object(); /// <summary> /// 獲得配置信息 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="isWeb">是否web程序</param> /// <returns></returns> public static T GetValue<T>(string key, bool isWeb = true) { return GetValue(key, default(T), isWeb); } /// <summary> /// 獲取配置信息 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="defaultValue"></param> /// <param name="isWeb"></param> /// <returns></returns> public static T GetValue<T>(string key, T defaultValue, bool isWeb = true) { T value; try { Dictionary<string, string> appSettingsConfig = GetCustomAppSettingsDic(isWeb); if (appSettingsConfig.ContainsKey(key)) { value = (T)Convert.ChangeType(appSettingsConfig[key], typeof(T)); } else { value = defaultValue; } } catch { value = default(T); } return value; } /// <summary> /// 獲得配置信息列表 /// </summary> /// <param name="isWeb"></param> /// <returns></returns> public static Dictionary<string, string> GetCustomAppSettingsDic(bool isWeb = true) { string AppSettingsConfigCacheKey = "AppName.AppSettingsConfig"; Dictionary<string, string> dic = new Dictionary<string, string>(); if (HttpRuntime.Cache.Get(AppSettingsConfigCacheKey) != null) { //讀取緩存 dic = HttpRuntime.Cache.Get(AppSettingsConfigCacheKey) as Dictionary<string, string>; } else { //解析文件 string filePath = string.Empty; if (isWeb) { //web根目錄讀取配置文件 filePath = System.IO.Path.Combine(HttpRuntime.AppDomainAppPath, @"App_Data/AppSettingsConfig.xml"); } else { //執行文件根目錄讀取配置文件 filePath = System.IO.Path.Combine(System.Environment.CurrentDirectory, @"App_Data/AppSettingsConfig.xml"); } //通用讀取根目錄 //filePath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory,@"App_Data/AppSetingsConfig.xml"); if (File.Exists(filePath)) { lock (lockObj) { XDocument doc; using (FileStream fsIn = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { doc = XDocument.Load(fsIn); } foreach (XElement element in doc.Element("appSettings").Descendants("add")) { string key = element.Attribute("key").Value; string value = element.Attribute("value").Value; if (!string.IsNullOrEmpty(key) && !dic.ContainsKey(key)) { dic.Add(key, value); } } //寫緩存 CacheDependency dp = new CacheDependency(filePath);//建立緩存依賴項 HttpRuntime.Cache.Insert(AppSettingsConfigCacheKey, dic, dp); } } } return dic; } }
2.配置文件示例(@"~/App_Data/AppSettingsConfig.xml")
<?xml version="1.0" encoding="utf-8"?> <appSettings> <add key="Version" value="1.0.0" /> <add key="Country" value="China"/> </appSettings>