zoukankan      html  css  js  c++  java
  • .net如何自定义config配置文件节点

    本文转载:http://www.cnblogs.com/lori/archive/2013/04/03/2997617.html

    对于小型项目来说,配置信息可以通过appSettings进行配置,而如果配置信息太多,appSettings显得有些乱,而且在开发人员调用时,也不够友好,节点名称很容易写错,这时,我们有几种解决方案

    1 自己开发一个配置信息持久化类,用来管理配置信息,并提供面向对象的支持
    2 使用.net自带的configSections,将配置信息分块管理,并提供实体类,便于开发人员友好的去使用它

    本文主要说说第二种方案,它由实体类,实体类工厂及配置文件三个部分,看代码:

    实体类设计:

    复制代码
    namespace Configer
    {
        /// <summary>
        /// 网站信息配置节点
        /// </summary>
        public class WebConfigSection : ConfigurationSection
        {
            /// <summary>
            /// 网站名称
            /// </summary>
            [ConfigurationProperty("WebName", DefaultValue = "", IsRequired = true, IsKey = false)]
            public string WebName
            {
    
                get { return (string)this["WebName"]; }
                set { this["WebName"] = value; }
            }
            /// <summary>
            /// 网站域名
            /// </summary>
            [ConfigurationProperty("DoMain", DefaultValue = "", IsRequired = true, IsKey = false)]
            public string DoMain
            {
    
                get { return (string)this["DoMain"]; }
                set { this["DoMain"] = value; }
            }
    
        }
    }
    复制代码

    实体工厂类设计,主要用来生产实体配置信息

    复制代码
    namespace Configer
    {
        /// <summary>
        /// 网站配置信息工厂
        /// </summary>
        public class WebConfigManager
        {
            /// <summary>
            /// 配置信息实体
            /// </summary>
            public static readonly WebConfigSection Instance = GetSection();
    
            private static WebConfigSection GetSection()
            {
                WebConfigSection config = ConfigurationManager.GetSection("WebConfigSection") as WebConfigSection;
                if (config == null)
                    throw new ConfigurationErrorsException();
                return config;
            }
        }
    }
    复制代码

    而最后就是.config文件了,它有configSections和指定的sections块组成,需要注意的是configSections必须位于configuration的第一个位置

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <section name="WebConfigSection" type="Configer.WebConfigSection, test"/>
      </configSections>
      <connectionStrings>
        <add name="backgroundEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.sqlexpress;Initial Catalog=background;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>
    
      <WebConfigSection WebName="占占网站" DoMain="www.zhanzhan.com"  />
      <appSettings>
        <add key="site" value="www.zzl.com"/>
    
      </appSettings>
    </configuration>
    复制代码

    以上三步实现后,我们就可以调用了,呵呵

      static void Main(string[] args)
       {
         Console.WriteLine(System.Configuration.ConfigurationManager.AppSettings["site"]);
         Console.WriteLine(WebConfigManager.Instance.DoMain);
         Console.WriteLine(WebConfigManager.Instance.WebName);
       }

    结果如下:

  • 相关阅读:
    MyBatis mapper.xml中SQL处理小于号与大于号 和小于等于号
    iOS打包时Export的四个选择是什么意思?
    Xcode中New Build System和 Legacy build system的区别
    Xcode中Debug、Profile、Release的区别
    versionCode和versionName区别
    Android Studio 3.5 plugin中找不到Flutter插件
    Javascript 面向对象编程(一):封装
    Flutter-常用第三方库
    iOS info.plist 中的隐私权限
    Flutter打包ios应用流程详解
  • 原文地址:https://www.cnblogs.com/51net/p/3959864.html
Copyright © 2011-2022 走看看