zoukankan      html  css  js  c++  java
  • 使用IConfigurationSectionHandler在web.config中增加自定义配置

    一. 场景
        这里仅举一个简单应用的例子,我希望在web.config里面增加网站的基本信息,如:网站名称,网站版本号,是否将网站暂时关闭等。
    二. 基本实现方法
    1. 定义配置节点对应的类:SiteSetting

        代码片段:

    namespace Tristan.SeeCustomConfig {
        
    public class SiteSetting {
            
    public string SiteName getset; }
            
    public string SiteVersion getset; }
            
    public bool Closed getset; }
        }

    }


    2. 实现IConfigurationSectionHandler接口:SiteSettingHandler


    namespace Tristan.SeeCustomConfig {
        
    public class SiteSettingHandler : IConfigurationSectionHandler {
            
    #region IConfigurationSectionHandler Members

            
    public object Create(object parent, object configContext, System.Xml.XmlNode section) {
                
    string siteName = section.SelectSingleNode("siteName").InnerText;
                
    string siteVersiton = section.SelectSingleNode("siteVersion").InnerText;
                
    bool closed = Convert.ToBoolean(section.SelectSingleNode("closed").InnerText);
                
    return new SiteSetting() { SiteName = siteName, SiteVersion = siteVersiton };
            }


            
    #endregion

        }

    }

    3. 在web.config中进行配置
        在<configSections></configSections>里面增加一个节点:

    <section name="siteSetting" type="Tristan.SeeCustomConfig.SiteSettingHandler"/>

        name:指定我们将要增加的节点名为"siteSetting",接下来会使用它来编写配置节点
        type:指定处理这个配置节点的handler,这个类,我们在前面已经把代码实现了
        然后在<configuration><configuration>里面增加一段xml:

    <siteSetting>
            
    <siteName>遇见未来</siteName>
            
    <siteVersion>1.0</siteVersion>
        
    <closed>false</closed>
        
    </siteSetting>


    4. 看看效果吧
        随便建一个页面在后台代码里写几行代码做个测试:

    namespace Tristan.SeeCustomConfig {
        
    public partial class _Default : System.Web.UI.Page {
            
    protected void Page_Load(object sender, EventArgs e) {
                SiteSetting site 
    = ConfigurationManager.GetSection("siteSetting"as SiteSetting;
                Response.Write(site.SiteName 
    + "," + site.SiteVersion + "," + site.Closed.ToString());
            }

        }

    }

        运行,可以看到,我们在web.config中的信息被write出来了。 :)


    三. 使用XML反序列化
    1. 修改SiteSetting

    namespace Tristan.SeeCustomConfig {

        [Serializable]
        [XmlRoot(
    "siteSetting")]
        
    public class SiteSetting {
            [XmlElement(
    "siteName",typeof(string))]
            
    public string SiteName getset; }

            [XmlElement(
    "siteVersion",typeof(string))]
            
    public string SiteVersion getset; }

            [XmlElement(
    "closed",typeof(Boolean))]
            
    public bool Closed getset; }
        }

    }


    2. 修改SiteSettingHandler


    namespace Tristan.SeeCustomConfig {
        
    public class SiteSettingHandler : IConfigurationSectionHandler {
            
    IConfigurationSectionHandler Members IConfigurationSectionHandler Members

            
    public object Create(object parent, object configContext, System.Xml.XmlNode section) {
                
    //string siteName = section.SelectSingleNode("siteName").InnerText;
                
    //string siteVersiton = section.SelectSingleNode("siteVersion").InnerText;
                
    //bool closed = Convert.ToBoolean(section.SelectSingleNode("closed").InnerText);
                
    //return new SiteSetting() { SiteName = siteName, SiteVersion = siteVersiton };

                
    string typeName = ((XmlElement)section).GetAttribute("type");
                XmlSerializer xz 
    = new XmlSerializer(Type.GetType(typeName));
                
    using (StringReader sr = new StringReader(section.OuterXml)) {
                    
    return xz.Deserialize(sr);
                }

            }


            
    #endregion

        }

    }

     
    3. 修改web.config中的配置

    <siteSetting type="Tristan.SeeCustomConfig.SiteSetting">
            
    <siteName>遇见未来</siteName>
            
    <siteVersion>1.0</siteVersion>
        
    <closed>false</closed>
        
    </siteSetting>


    4. 再来看看
        不修改测试代码,得到了一样的效果 :)

  • 相关阅读:
    使用SMM框架开发企业级应用-----注解
    使用SMM框架开发企业级应用-----顾问(Advisor)与 正则表达式做顾问
    使用SMM框架开发企业级应用-----AOP进阶
    使用SMM框架开发企业级应用-----代理(静态,JDK,CGLIB)
    使用SMM框架开发企业级应用-----Spring集合注入和域属性自动注入byName和byType
    使用SMM框架开发企业级应用-----面试题
    使用SMM框架开发企业级应用-----Spring AOP
    swagger-ui 3.0.0版本介绍
    vite 创建ts项目
    vue3
  • 原文地址:https://www.cnblogs.com/chenying99/p/2007390.html
Copyright © 2011-2022 走看看