欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

配置文件_自定义section标签获取数据

程序员文章站 2022-06-28 20:49:00
前言:为了节约时间,先只粘贴关键代码: 1-添加section标签,name为自定义标签名称,type为:命名空间+类型,程序集名称 2-自定义标签数据: watchModel为自定义标签(ConfigurationSection),watchItems为自定义标签的数据集(Configuratio ......

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

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

 

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