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
}
}