zoukankan      html  css  js  c++  java
  • 配置文件_自定义section标签获取数据

      前言:为了节约时间,先只粘贴关键代码:

    1-添加section标签,name为自定义标签名称,type为:命名空间+类型,程序集名称

    <section name="watchModel" type="DataCommon.Help.WatchModel,DataCommon" />

    2-自定义标签数据:

      watchModel为自定义标签(ConfigurationSection),watchItems为自定义标签的数据集(ConfigurationElementCollection);add为数据集里的model(ConfigurationElement)。

    <watchModel>
        <watchItems>
          <!--上   班-->
          <add ID="1" IsEnable="true" BeginTime="09:05:00" EndTime="09:15:00" MaxActionTimes="2" ActionSeconds="120" ActionName="SendTipsToDingding" ActionData="shangban" />
          <!--下   班-->
          <add ID="2" IsEnable="true" BeginTime="17:50:00" EndTime="18:05:00" MaxActionTimes="2" ActionSeconds="120" ActionName="SendTipsToDingding" ActionData="xiaban" />
          <!--每日BUG-->
          <add ID="3" IsEnable="true" BeginTime="09:10:00" EndTime="09:15:00" MaxActionTimes="1" ActionSeconds="0" ActionName="MyProjectBugTips" ActionData="" />
          <!--吃饭提醒-->
          <add ID="4" IsEnable="true" BeginTime="11:35:00" EndTime="11:40:00" MaxActionTimes="2" ActionSeconds="120" ActionName="SendTipsToDingding" ActionData="chifan" />
          <!--项目上线临时时间-->
          <add ID="5" IsEnable="true" BeginTime="14:05:00" EndTime="17:15:00" MaxActionTimes="10" ActionSeconds="30" ActionName="MyProjectBugTips" ActionData="bugCheck" />
        </watchItems>
      </watchModel>

    3-创建自定义标签Model:

    标签分为3部分,代码也对应3个继承类:ConfigurationSection,ConfigurationElementCollection,ConfigurationElement。

    类的属性和标签属性使用:ConfigurationProperty("标签属性")进行对应,需要对get,set方法进行改造。

    集合标签:需要对key,createElement,和下标获取对象方法,进行重构。

    常见错误-1-对象watchModel需要继承ConfigrationSection,总之每个子标签对应的model都需要继承对应的属性,并对其进行改写或重写:

    创建 watchModel 的配置节处理程序时出错: 类型“DataCommon.Help.WatchModel”不从“System.Configuration.IConfigurationSectionHandler”继承。

    public class ConfigHelper{
        /// <summary>
            /// 获取Section对象数据集
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <returns></returns>
            public static T GetSectionT<T>(string sectionName) where T : class
            {
                T t = ConfigurationManager.GetSection(sectionName) as T;
                return t;
            }
    }
    WatchModel watchModel = ConfigHelper.GetSectionT<WatchModel>("watchModel");
    namespace DataCommon.Help
    {
        public class WatchModel : ConfigurationSection
        {
            [ConfigurationProperty("watchItems")]
            public WatchItems WatchItems
            {
                get
                {
                    return this["watchItems"] as WatchItems;
                }
                set
                {
                    this["watchItems"] = value;
                }
            }
        }
    
        public class WatchItems : ConfigurationElementCollection
        {
            protected override ConfigurationElement CreateNewElement()
            {
                return new WatchItem();
            }
    
            protected override object GetElementKey(ConfigurationElement element)
            {
                return ((WatchItem)element).ID;
            }
    
            public WatchItem this[object id]
            {
                get
                {
                    return (WatchItem)base.BaseGet(id);
                }
            }
        }
    
        public class WatchItem : ConfigurationElement
        {
            /// <summary>
            /// 唯一标识
            /// </summary>
            [ConfigurationProperty("ID")]
            public int ID
            {
                get
                {
                    return (int)this["ID"];
                }
                set
                {
                    this["ID"] = value;
                }
            }
            /// <summary>
            /// 是否启用
            /// </summary>
            [ConfigurationProperty("IsEnable")]
            public bool IsEnable
            {
                get
                {
                    return (bool)this["IsEnable"];
                }
                set
                {
                    this["IsEnable"] = value;
                }
            }
            /// <summary>
            /// 开始时间(误差1秒=取决于计时器默认时间间隔)
            /// </summary>
            [ConfigurationProperty("BeginTime")]
            public string BeginTime
            {
                get
                {
                    return (string)this["BeginTime"];
                }
                set
                {
                    this["BeginTime"] = value;
                }
            }
            /// <summary>
            /// 结束时间
            /// </summary>
            [ConfigurationProperty("EndTime")]
            public string EndTime
            {
                get
                {
                    return (string)this["EndTime"];
                }
                set
                {
                    this["EndTime"] = value;
                }
            }
            /// <summary>
            /// 最大执行次数
            /// </summary>
            [ConfigurationProperty("MaxActionTimes")]
            public int MaxActionTimes
            {
                get
                {
                    return (int)this["MaxActionTimes"];
                }
                set
                {
                    this["MaxActionTimes"] = value;
                }
            }
            /// <summary>
            /// 计时周期内执行的动作(动作会在到达开始时间后的)
            /// </summary>
            [ConfigurationProperty("ActionName")]
            public string ActionName
            {
                get
                {
                    return (string)this["ActionName"];
                }
                set
                {
                    this["ActionName"] = value;
                }
            }
            /// <summary>
            /// 计时周期内执行的动作传入数据(动作会在到达开始时间后的)
            /// </summary>
            [ConfigurationProperty("ActionData")]
            public string ActionData
            {
                get
                {
                    return (string)this["ActionData"];
                }
                set
                {
                    this["ActionData"] = value;
                }
            }
            /// <summary>
            /// 动作执行时间间隔(秒)
            /// </summary>
            [ConfigurationProperty("ActionSeconds")]
            public int ActionSeconds
            {
                get
                {
                    return (int)this["ActionSeconds"];
                }
                set
                {
                    this["ActionSeconds"] = value;
                }
            }
        }
    }

    总结:以上就是主要的代码了,中间也遇到过一些问题,上面基本上都写了,以后再补充优化吧。

  • 相关阅读:
    Python高级数据处理与可视化(四)---- 数据存储
    Python高级数据处理与可视化(三)---- Matplotlib图像属性控制 & Pandas作图
    Notepad++
    HDU2819 Swap(二分匹配+输出结果)
    HDU1281 棋盘游戏(二分匹配+找必要的点)
    HDU1083 Courses(二分匹配)
    HDU2444 二分图判断+最大匹配
    HDU1045 Fire Net(二分匹配)
    exam1802 Bounty Hunter II(DAG的最小路径覆盖)
    SDUSTOJ 1801 LIS2(最长上升子序列不同值的数量)
  • 原文地址:https://www.cnblogs.com/lxhbky/p/11047112.html
Copyright © 2011-2022 走看看