Config配置文件节点配置与类型对象的对应关系

我们在做项目开发的时候有时候可以将一个全局的实例对象以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"));

 

  •  最后重点我们来看下配置节点与对象的对照关系图,从图中可以知道,配置对象与节点的转换规则:
  1. 对象、属性与配置节点命名的对应关系——对象类型名为Pascal,配置节点中为camelCase;
  2. 在节点中属性值为引用类型时,以子节点的形式来配置,值类型则配置为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;
                }
            }
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值