.Net配置文件——统一节点配置管理

简介:        对于.Net中的自定义节点,如果要单独处理,就要为这个节点添加一个指定的类,如果我们在一个应用程序中,定义了很多个自定义节点的话,还按照这样做,就会多出很多个处理类来,为了避免太多的类,我们将所有自定节点都指定一个自定义节点作为入口,然后只写一个处理类,以此为入口,读取其他节点。


       对于.Net中的自定义节点,如果要单独处理,就要为这个节点添加一个指定的类,如果我们在一个应用程序中,定义了很多个自定义节点的话,还按照这样做,就会多出很多个处理类来,为了避免太多的类,我们将所有自定节点都指定一个自定义节点作为入口,然后只写一个处理类,以此为入口,读取其他节点。


    例如,配置文件只定义一个入口节点:


  

 <!--通用配置存储方法-->
  <traceFact type="ClassLib.ConfigManager,ClassLib">
    
    <forum name="TraceFact.Net Community"> 
      <root url="http:192.168.24.204"/>
      <replyCount>20</replyCount>
      <pageSize>30</pageSize>
      <offlineTime>20</offlineTime>
    </forum>
    
    <blog>
      <root url="http:asdakfj.com"/>
      <urlMappings>
        <rewriteRule>
          <request>~/(\d{4})/Default\.aspx</request>
          <sendTo>~BlogDetail.aspx?year=$1</sendTo>
        </rewriteRule>
      </urlMappings>
    </blog>   
    
    <mailServer address="www.baidu.com" userName="lhc" password="234r32r"/>
    
    <greetingStrategy type="ClassLib.ChineseGreeting,ClassLib"/>
    
  </traceFact>
  



      处理类:


   

 /// <summary>
    /// Class GeneralConfigHandler
    /// </summary>
    /// <remarks>Editor:v-liuhch CreateTime:2015/7/1 10:50:40</remarks>
    public class GeneralConfigHandler:IConfigurationSectionHandler
    {
        /// <summary>
        /// 创建配置节处理程序。
        /// </summary>
        /// <param name="parent">父对象。</param>
        /// <param name="configContext">配置上下文对象。</param>
        /// <param name="section">节 XML 节点。</param>
        /// <returns>创建的节处理程序对象。</returns>
        /// <exception cref="System.NotImplementedException"></exception>
        /// <remarks>Editor:v-liuhch CreateTime:2015/7/1 10:50:42</remarks>
        public object Create(object parent, object configContext, XmlNode section)
        {
            //获取节点type属性的值
            Type t=Type.GetType(section.Attributes["type"].Value);//返回configManager
            //直接将section进行传递
            object[] paramters={section};
            //将要创建的类型实例
            object obj = null;

            try
            {
                obj = Activator.CreateInstance(t, paramters);//使用有参数的构造函数

            }
            catch (Exception)
            {

                return null;
            }
            return obj;
        }
    }


      

        上面的类主要是为了实现创建具体配置节点管理类,在配置节点的管理类中,存有各个子节点类的引用。



 

 /// <summary>
    /// GeneralConfigHandler通过反射动态创建的,它实际上只是作为一个容器
    ///这个类仅仅是作为一个容器,包含对其下具体节点配置的引用,并通过traceFact根节点,获取traceFact其下的子节点,然后再创建用于映射具体的子节点的类型实例
    /// </summary>
    /// <remarks>Editor:v-liuhch CreateTime:2015/7/1 14:06:21</remarks>
    public class ConfigManager
    {
        private XmlNode section;
        private FroumConfiguration forumConfig;
        //对于其他节点的处理强类型访问类也定义为成员变量放在这里。。。。。。。

        public FroumConfiguration froumConfig {

            get { return forumConfig; }
        }

        public ConfigManager(XmlNode section) {
            this.section = section;
            forumConfig = new FroumConfiguration(section.SelectSingleNode("forum"));
        }
    }

    /// <summary>
    /// 具体子节点配置forum结点:处理<forum name="TraceFact.Net Community"> 
    /// </summary>
    /// <remarks>Editor:v-liuhch CreateTime:2015/7/1 14:22:08</remarks>
    public class FroumConfiguration{
        private XmlNode forumNode;
        
        //将forum结点传递进来
        public FroumConfiguration(XmlNode section){
            this.forumNode=section;
        }

        /// <summary>
        /// Gets the name. <forum name="TraceFact.Net Community"> 
        /// </summary>
        /// <value>The name.</value>
        /// <remarks>Editor:v-liuhch CreateTime:2015/7/1 14:58:00</remarks>
        public string Name{
            get{
                return forumNode.Attributes["name"].Value;
                }
        }
        /// <summary>
        /// Gets the root URL.:<root url="http:192.168.24.204"/>
        /// </summary>
        /// <value>The root URL.</value>
        /// <remarks>Editor:v-liuhch CreateTime:2015/7/1 14:56:08</remarks>
        public string RootUrl{
        
            get{
                return forumNode.SelectSingleNode("root").Attributes["url"].Value;
            }
        }

        /// <summary>
        /// Gets the size of the page.<pageSize>30</pageSize>
        /// </summary>
        /// <value>The size of the page.</value>
        /// <remarks>Editor:v-liuhch CreateTime:2015/7/1 14:57:18</remarks>
        public int PageSize{
        
            get{
                return int.Parse(forumNode.SelectSingleNode("pageSize").InnerText);
            }
        }

        /// <summary>
        /// Gets the reply count.<replyCount>20</replyCount>
        /// </summary>
        /// <value>The reply count.</value>
        /// <remarks>Editor:v-liuhch CreateTime:2015/7/1 14:57:03</remarks>
        public int ReplyCount{
        
            get{
                return int.Parse(forumNode.SelectSingleNode("replyCount").InnerText);
            }
        }

        /// <summary>
        /// Gets the offline time.<offlineTime>20</offlineTime>
        /// </summary>
        /// <value>The offline time.</value>
        /// <remarks>Editor:v-liuhch CreateTime:2015/7/1 14:57:35</remarks>
        public int OfflineTime {
            get {
                return int.Parse(forumNode.SelectSingleNode("offlineTime").InnerText);

            }
        }
    }


      这样,我们使用的时候,每次都用这一个类来实现对节点的访问:


      

 ConfigManager config = ConfigurationManager.GetSection("traceFact") as ConfigManager;

            //取值
            ltrName.Text = config.froumConfig.Name;
            ltrOfflineTime.Text = config.froumConfig.OfflineTime.ToString();
            ltrPageSize.Text = config.froumConfig.PageSize.ToString();
            ltrReplyCount.Text = config.froumConfig.ReplyCount.ToString();
            ltrRootUrl.Text = config.froumConfig.RootUrl.ToString();


 



目录
相关文章
|
XML 存储 JSON
使用自定义XML配置文件在.NET桌面程序中保存设置
本文将详细介绍如何在.NET桌面程序中使用自定义的XML配置文件来保存和读取设置。除了XML之外,我们还将探讨其他常见的配置文件格式,如JSON、INI和YAML,以及它们的优缺点和相关的NuGet类库。最后,我们将重点介绍我们为何选择XML作为配置文件格式,并展示一个实用的示例。
124 0
|
5月前
|
开发框架 .NET Nacos
使用 Nacos 在 C# (.NET Core) 应用程序中实现高效配置管理和服务发现
使用 Nacos 在 C# (.NET Core) 应用程序中实现高效配置管理和服务发现
461 0
|
JSON 数据格式
.net core 读取配置文件的几种方式
# 一、Json配置文件 ## 1、这里的配置文件指的是下图 ![请在此添加图片描述](https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/5877188/20231031-c79281ce.png?x-cos-security-token=Agam0Cn5pDWzx5RjFFzmFp5SXifE2lwa11a1f9dbaeac346ddc3b179889543979Cq1MFNxd9AGUyz-E0xgqW-YuUxnToKOaIzGnWLMcgCmVO4YvDOI5Os41fWu
134 0
.net core 读取配置文件的几种方式
|
6月前
|
XML 开发框架 .NET
C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作
C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作
68 1
|
6月前
|
XML Java 数据格式
javaweb实训第五天下午——xml配置文件约束报错问题
问题描述: 如果电脑连不上网,或者网速不好可能会造成Spring框架中xml配置文件出现错误。但是这个错误不影响项目的运行的;
61 0
|
开发框架 前端开发 JavaScript
一个.Net简单、易用的配置文件操作库
一个.Net简单、易用的配置文件操作库
57 0
|
XML 存储 JSON
.Net Core基础之读取配置文件
.Net Core基础之读取配置文件
165 0
|
开发框架 .NET
.net 动态修改web.config 中appSettings节点中的值
.net 动态修改web.config 中appSettings节点中的值
149 0
|
数据库
.NET的EF框架中:在应用程序配置文件中找不到名为“”的连接字符串问题
.NET的EF框架中:在应用程序配置文件中找不到名为“”的连接字符串问题
395 0
.NET的EF框架中:在应用程序配置文件中找不到名为“”的连接字符串问题
|
JSON .NET C#
.NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入
作者:依乐祝原文链接:https://www.cnblogs.com/yilezhu/p/9998021.html 写在前面 上篇文章我给大家讲解了ASP.NET Core的概念及为什么使用它,接着带着你一步一步的配置了.NET Core的开发环境并创建了一个ASP.NET Core的mvc项目,同时又通过一个实战教你如何在页面显示一个Content的列表。
2227 0
下一篇
无影云桌面