我们在做项目开发的时候有时候可以将一个全局的实例对象以Web.Config中的节点来配置存储,但这里面要注意首字母的大小写转换(类型为Pascal在配置节点中需转换为小驼峰式camelCase命名写法 ):
- 首先我们看下配置文件中的相关配置:
<configuration>
........
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="HUA_eReport@jabil.com">
<network host="CORIMC04" port="25" defaultCredentials="true" />
</smtp>
</mailSettings>
</system.net>
.......
</configuration>
- 代码中读取用节点对象值并存入Dictionary中:
var configFile = WebConfigurationManager.OpenWebConfiguration("~/");
var MailConfig = (MailSettingsSectionGroup)configFile.GetSectionGroup("system.net/mailSettings");
DataCache.Put("MailConfig", MailConfig);
- 从Dictionary中读取前面存入的节点对应对象:
Mail mail = new Mail(DataCache.Get<MailSettingsSectionGroup>("MailConfig"));
- 最后重点我们来看下配置节点与对象的对照关系图,从图中可以知道,配置对象与节点的转换规则:
- 对象、属性与配置节点命名的对应关系——对象类型名为Pascal,配置节点中为camelCase;
- 在节点中属性值为引用类型时,以子节点的形式来配置,值类型则配置为Attribute赋值。
- 附. 上例中代码引用的存取Dictionary方法类代码:
public class DataCache
{
private static Dictionary<string, object> dic = new Dictionary<string, object>();
private static object locker = new object();
public static T Get<T>(string key)
{
lock (locker)
{
object val;
if (dic.ContainsKey(key) && dic.TryGetValue(key, out val))
{
return (T)val;
}
return default(T);
}
}
public static void Put<T>(string key, T value, bool isReplace = false)
{
lock (locker)
{
if (dic.ContainsKey(key))
{
if (isReplace)
{
dic[key] = value;
}
}
else
{
dic[key] = value;
}
}
}
public static void Remove(string key)
{
lock (locker)
{
if (dic.ContainsKey(key))
{
dic.Remove(key);
}
}
}
public static void Clear()
{
lock (locker)
{
dic.Clear();
}
}
public object this[string key]
{
get
{
lock (locker)
{
if (dic.ContainsKey(key))
{
return dic[key];
}
return null;
}
}
}
}