using System; using System.Collections.Specialized; namespace BatchService.Framework.Utility { /// /// 配置文件appSettings节点的帮助方法 /// public class AppSettingsHelper { private static readonly NameValueCollection appSettings; static AppSettingsHelper() { appSettings = System.Configuration.ConfigurationManager.AppSettings; ; } public static bool GetBoolValue(string key) { bool value = false; if (appSettings[key] != null) bool.TryParse(appSettings[key], out value); return value; } public static int GetIntValue(string key) { int value = 0; if (appSettings[key] != null) int.TryParse(appSettings[key], out value); return value; } #region GetString /// /// 获取配置文件中appSettings节点下指定索引键的字符串类型的的值 /// /// 索引键 /// 字符串 public static string GetString(string key) { return getValue(key, true, null); } /// /// 获取配置文件中appSettings节点下指定索引键的字符串类型的的值 /// /// 索引键 /// 默认值 /// 字符串 public static string GetString(string key, string defaultValue) { return getValue(key, false, defaultValue); } #endregion #region GetStringArray /// /// 获取配置文件中appSettings节点下指定索引键的string[]类型的的值 /// /// 索引键 /// 分隔符 /// 字符串数组 public static string[] GetStringArray(string key, string separator) { return getStringArray(key, separator, true, null); } /// /// 获取配置文件中appSettings节点下指定索引键的string[]类型的的值 /// /// 索引键 /// 分隔符 /// 默认值 /// 字符串数组 public static string[] GetStringArray(string key, string separator, string[] defaultValue) { return getStringArray(key, separator, false, defaultValue); } /// /// 获取配置文件中appSettings节点下指定索引键的string[]类型的的值 /// /// 索引键 /// 分隔符 /// 指定配置文件中是否必须需要配置有该名称的元素,传入False则方法返回默认值,反之抛出异常 /// 默认值 /// 字符串数组 private static string[] getStringArray(string key, string separator, bool valueRequired, string[] defaultValue) { string value = getValue(key, valueRequired, null); if (!string.IsNullOrEmpty(value)) return value.Split(new[] { separator }, StringSplitOptions.RemoveEmptyEntries); else if (!valueRequired) return defaultValue; throw new ApplicationException("在配置文件的appSettings节点集合中找不到key为" + key + "的子节点,且没有指定默认值"); } #endregion #region GetInt32 /// /// 获取配置文件中appSettings节点下指定索引键的Int类型的的值 /// /// 索引键 /// Int public static int GetInt32(string key) { return getInt32(key, null); } /// /// 获取配置文件中appSettings节点下指定索引键的Int类型的的值 /// /// 索引键 /// 默认值 /// Int public static int GetInt32(string key, int defaultValue) { return getInt32(key, defaultValue); } /// /// 获取配置文件中appSettings节点下指定索引键的Int类型的的值 /// /// 索引键 /// 默认值 /// Int private static int getInt32(string key, int? defaultValue) { return getValue(key, (v, pv) => int.TryParse(v, out pv), defaultValue); } #endregion #region GetBoolean /// /// 获取配置文件中appSettings节点下指定索引键的布尔类型的的值 /// /// 索引键 /// 布尔值 public static bool GetBoolean(string key) { return getBoolean(key, null); } /// /// 获取配置文件中appSettings节点下指定索引键的布尔类型的的值 /// /// 索引键 /// 默认值 /// 布尔值 public static bool GetBoolean(string key, bool defaultValue) { return getBoolean(key, defaultValue); } /// /// 获取配置文件中appSettings节点下指定索引键的布尔类型的的值 /// /// 索引键 /// 默认值 /// 布尔值 private static bool getBoolean(string key, bool? defaultValue) { return getValue(key, (v, pv) => bool.TryParse(v, out pv), defaultValue); } #endregion #region GetTimeSpan /// /// 获取配置文件中appSettings节点下指定索引键的时间间隔类型的的值 /// /// 索引键 /// 时间间隔 public static TimeSpan GetTimeSpan(string key) { return TimeSpan.Parse(getValue(key, true, null)); } /// /// 获取配置文件中appSettings节点下指定索引键的时间间隔类型的的值 /// /// 索引键 /// 默认值 /// 时间间隔 public static TimeSpan GetTimeSpan(string key, TimeSpan defaultValue) { string val = getValue(key, false, null); if (val == null) return defaultValue; return TimeSpan.Parse(val); } #endregion #region Private Methods /// /// 获取配置文件appSettings集合中指定索引的值 /// /// 返回值类型参数 /// 索引键 /// 将指定索引键的值转化为返回类型的值的委托方法 /// 默认值 /// private static T getValue(string key, Func parseValue, T? defaultValue) where T : struct { string value = appSettings[key]; if (value != null) { T parsedValue = default(T); if (parseValue(value, parsedValue)) return parsedValue; else throw new ApplicationException(string.Format("Setting '{0}' was not a valid {1}", key, typeof(T).FullName)); } if (!defaultValue.HasValue) throw new ApplicationException("在配置文件的appSettings节点集合中找不到key为" + key + "的子节点,且没有指定默认值"); else return defaultValue.Value; } /// /// 获取配置文件appSettings集合中指定索引的值 /// /// 索引 /// 指定配置文件中是否必须需要配置有该名称的元素,传入False则方法返回默认值,反之抛出异常 /// 默认值 /// 字符串 private static string getValue(string key, bool valueRequired, string defaultValue) { string value = appSettings[key]; if (value != null) return value; else if (!valueRequired) return defaultValue; throw new ApplicationException("在配置文件的appSettings节点集合中找不到key为" + key + "的子节点"); } #endregion } }