配置文件_自定义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,和下标获取对象方法,进行重构。

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

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

原文地址:https://www.cnblogs.com/lxhbky/p/11047112.html

时间: 2024-08-03 06:30:33

配置文件_自定义section标签获取数据的相关文章

一个自定义 HBase Filter -“通过RowKeys来高性能获取数据”

大家在使用HBase和Solr搭建系统中经常遇到的一个问题就是:“我通过SOLR得到了RowKeys后,该怎样去HBase上取数据”.使用现有的Filter性能差劲,网上也没有现成的解决方案,我在这里把这个问题的解决办法分享给大家,抛砖引玉一下. Solr和HBase专辑 1.“关于Solr的使用总结的心得体会”(http://www.cnblogs.com/wgp13x/p/3742653.html) 2.“中文分词器性能比较?”(http://www.cnblogs.com/wgp13x/p

Validform和aui2.0结合使用的表单自定义验证提示和列表页异步获取数据Demo

二.添加自定义验证演示       Validform验证提示大多都是在输入框或下拉框的右边或下面.感觉就是不美观,特别是表单字段少的时候,这种在相应对象旁边的提示就没必要了,      它会给人一种不友好的感觉(只是自己的感觉).所以下面写了三种添加演示,希望大家能给出建议,以免下次用起来纠结,不知道用哪种好.        表单验证插件是我们经常使用的Validform_v5.3.2_min.js.先上添加1演示的表单验证js代码,这里我设置了点击提交按钮后才验证.其他添加演示的区别不大,详

Springboot中使用自定义参数注解获取 token 中用户数据

使用自定义参数注解获取 token 中User数据 使用背景 在springboot项目开发中需要从token中获取用户信息时通常的方式要经历几个步骤 拦截器中截获token TokenUtil工具类解析token中的用户信息 把解析结果存入到成员变量中 controller中通过TokenUtil工具类提供的静态方法获取用户信息 下面是过程示例代码 /*--------1.拦截器中获取---------*/ String token =request.getHeader("token"

从SQLite获取数据完成一个产品信息展示

在ios实际开发当中,我们常常用到Core Data做为数据储存首选.但在处理一些大量复杂的数据值且数据之间相互关联的时候,这就不得不使用关系型数据库来实现.例如一个导航程序,自身应该包含大量的地图自身数据并且数据需要在app启动的时候就开始读取加载.而且数据本身变动不是特别频繁.重复向服务器发送请求获取信息是一件十分浪费的事情.因此我们可以用一个本地数据文件来直接配置.做为轻量级关系型数据库的sqlite是ios开发首选.而xcode本身包含了sqlite库,因此在ios使用的时候不需要额外配

App.config和Web.config配置文件的自定义配置节点

前言 昨天修改代码发现了一个问题,由于自己要在WCF服务接口中添加了一个方法,那么在相应调用的地方进行更新服务就可以了,不料意外发生了,竟然无法更新.左查右查终于发现了问题.App.config配置文件中的配置貌似出现了问题.查找节点发现是如下节点: <configSections> <section name="Test1" type="Demo.Section1,Demo"/> .............. </configSect

(转)ThinkPHP自定义模板标签详解

转之--http://www.thinkphp.cn/topic/6258.html 模板标签让网站前台开发更加快速和简单,这让本该由程序猿才能完成的工作,现在只要稍懂得HTM的人也能轻易做到,这也就是模板标签的强大之处.接触过dedecms或者phpcms等内容管理系统的人都知道,cms的前台都是使用模板标签来调用数据,如列表,内容.来看一个phpcms v9调用数据排行列表的标签: 1 {pc:content action="hits" catid="6" nu

10.5 android输入系统_Reader线程_使用EventHub读取事件和核心类及配置文件_实验_分析

4. Reader线程_使用EventHub读取事件 使用inotify监测/dev/input下文件的创建和删除 使用epoll监测有无数据上报 细节: a.fd1 = inotify_init("/dev/input") b.假设input下已经有了event0和event1 fd2 = open("/dev/input/event0") fd3= open("/dev/input/event1") c.使用epoll_wait监测fd1.f

androidclient和站点数据交互的实现(基于Http协议获取数据方法)

androidclient一般不直接訪问站点数据库,而是像浏览器一样发送get或者post请求.然后站点返回client能理解的数据格式,client解析这些数据.显示在界面上.经常使用的数据格式是xml和json. 能够理解client事实上是一个你自定义标记语言的浏览器,一般浏览器能解析的是html+css的数据,而androidclient能解析的是xml和json(或者都不是而是你自定义的火星格式),服务端为了能满足client输出这样的数据格式的需求,不得不专门针对client开发不同

在java项目中怎样利用Dom4j解析XML文件获取数据

在曾经的学习.net时常常会遇到利用配置文件来解决项目中一些须要常常变换的数据.比方数据库的连接字符串儿等.这个时候在读取配置文件的时候.我们一般会用到一个雷configuration,通过这个类来进行直接读取,能够说这是程序中直接封装好的,包含配置文件里书写的格式等等.那么,假设.想要在配置文件里写一些其它的数据,直接以XML文件的格式进行书写.这个时候在后台怎样读取XML文件里的数据呢?这里利用Dom4j来解析XML文件里连接oracle数据库的xml数据. 在使用之前,首先要在自己的项目中