最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決在Web.config或App.config中添加自定義配置的方法詳解

 更新時間:2013年05月18日 15:04:44   作者:  
本篇文章是對在Web.config或App.config中添加自定義配置的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
.Net中的System.Configuration命名空間為我們在web.config或者app.config中自定義配置提供了完美的支持。最近看到一些項目中還在自定義xml文件做程序的配置,所以忍不住寫一篇用系統(tǒng)自定義配置的隨筆了。
如果你已經(jīng)對自定義配置了如指掌,請忽略這篇文章。
言歸正傳,我們先來看一個最簡單的自定義配置
復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="simple" type="ConfigExample.Configuration.SimpleSection,ConfigExample"/>
  </configSections>
  <simple maxValue="20" minValue="1"></simple>
</configuration>

在配置文件中使用自定義配置,需要在configSections中添加一個section元素,并制定此section元素對應(yīng)的類型和名字。然后再在configuration根節(jié)點下面添加此自定義配置,如上例中的simple節(jié)點。simple節(jié)點只有兩個整形數(shù)的屬性maxValue和minValue。
要在程序中使用自定義配置我們還需要實現(xiàn)存取這個配置塊的類型,一般需要做如下三件事:
1. 定義類型從System.Configuration.ConfigurationSection繼承
2. 定義配置類的屬性,這些屬性需要用ConfigurationProperty特性修飾,并制定屬性在配置節(jié)中的名稱和其他一些限制信息
3. 通過基類的string索引器實現(xiàn)屬性的get ,set
非常簡單和自然,如下是上面配置類的實現(xiàn):
復(fù)制代碼 代碼如下:

public class SimpleSection:System.Configuration.ConfigurationSection
{
    [ConfigurationProperty("maxValue",IsRequired=false,DefaultValue=Int32.MaxValue)]
    public int MaxValue
    {
        get
        {
            return  (int)base["maxValue"];
        }
        set
        {
            base["maxValue"] = value;
        }
    }

    [ConfigurationProperty("minValue",IsRequired=false,DefaultValue=1)]
    public int MinValue
    {
        get { return (int) base["minValue"];}
        set { base["minValue"] = value; }
    }

 
    [ConfigurationProperty("enabled",IsRequired=false,DefaultValue=true)]
    public bool Enable
    {
        get
        {
            return (bool)base["enabled"];
        }
        set
        {
            base["enabled"] = value;
        }
    }
}

這樣子一個簡單的配置類就完成了,怎么在程序中使用這個配置呢?需要使用ConfigurationManager類(要引用System.configuration.dll這個dll只有在.Net2.0之后的版本中才有)的GetSection方法獲得配置就可以了。如下代碼:
復(fù)制代碼 代碼如下:

SimpleSection simple = ConfigurationManager.GetSection("simple") as SimpleSection;
Console.WriteLine("simple minValue={0} maxValue = {1}",simple.MinValue,simple.MaxValue);

這個配置類太過簡陋了,可能有時候我們還需要更復(fù)雜的構(gòu)造,比如在配置類中使用類表示一組數(shù)據(jù),下面我們看一個稍微復(fù)雜一點的自定義配置
復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="complex" type="ConfigExample.Configuration.ComplexSection,ConfigExample"/>
  </configSections>
  <complex height="190">
    <child firstName="James" lastName="Bond"/>
  </complex>
</configuration>

這個配置的名字是complex,他有一個屬性height,他的節(jié)點內(nèi)還有一個child元素這個元素有兩個屬性firstName和lastName;對于這個內(nèi)嵌的節(jié)點該如何實現(xiàn)呢?首先我們需要定義一個類,要從ConfigurationElement類繼承,然后再用和SimpleSection類似的方法定義一些用ConfigurationProperty特性修飾的屬性就可以了,當(dāng)然屬性值的get,set也要使用基類的索引器。如下實現(xiàn):
復(fù)制代碼 代碼如下:

public class ComplexSection : ConfigurationSection
{
    [ConfigurationProperty("height", IsRequired = true)]
    public int Height
    {
        get
        {
            return (int)base["height"];
        }
        set
        {
            base["height"] = value;
        }
    }

    [ConfigurationProperty("child", IsDefaultCollection = false)]
    public ChildSection Child
    {
        get
        {
            return (ChildSection)base["child"];
        }
        set
        {
            base["child"] = value;
        }
    }
}

public class ChildSection : ConfigurationElement
{
    [ConfigurationProperty("firstName", IsRequired = true, IsKey = true)]
    public string FirstName
    {
        get
        {
            return (string)base["firstName"];
        }
        set
        {
            base["firstName"] = value;
        }
    }

    [ConfigurationProperty("lastName", IsRequired = true)]
    public string LastName
    {
        get
        {
            return (string)base["lastName"];
        }
        set
        {
            base["lastName"] = value;
        }
    }
}

還有稍微再復(fù)雜一點的情況,我們可能要在配置中配置一組相同類型的節(jié)點,也就是一組節(jié)點的集合。如下面的配置:
復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="complex" type="ConfigExample.Configuration.ComplexSection,ConfigExample"/>
  </configSections>
  <complex height="190">
    <child firstName="James" lastName="Bond"/>

    <children>
      <add firstName="Zhao" lastName="yukai"/>
      <add firstName="Lee" lastName="yukai"/>
      <remove firstName="Zhao"/>
    </children>
  </complex>
</configuration>

請看children節(jié)點,它就是一個集合類,在它里面定義了一組add元素,也可以有remove節(jié)點把已經(jīng)添進(jìn)去的配置去掉。
要使用自定義節(jié)點集合需要從ConfigurationElementCollection類繼承一個自定義類,然后要實現(xiàn)此類GetElementKey(ConfigurationElement element)和ConfigurationElement CreateNewElement()兩個方法;為了方便的訪問子節(jié)點可以在這個類里面定義只讀的索引器。請看下面的實現(xiàn)
復(fù)制代碼 代碼如下:

public class Children : ConfigurationElementCollection
{
    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((ChildSection)element).FirstName;
    }

    protected override ConfigurationElement CreateNewElement()
    {
        return new ChildSection();
    }

    public ChildSection this[int i]
    {
        get
        {
            return (ChildSection)base.BaseGet(i);
        }
    }

    public ChildSection this[string key]
    {
        get
        {
            return (ChildSection)base.BaseGet(key);
        }
    }

}

當(dāng)然要使用此集合類我們必須在Complex類中添加一個此集合類的屬性,并要指定集合類的元素類型等屬性,如下:
復(fù)制代碼 代碼如下:

[ConfigurationProperty("children", IsDefaultCollection = false)]
    [ConfigurationCollection(typeof(ChildSection), CollectionType = ConfigurationElementCollectionType.AddRemoveClearMap, RemoveItemName = "remove")]
    public Children Children
    {
        get
        {
            return (Children)base["children"];
        }
        set
        {
            base["children"] = value;
        }
}

我們會經(jīng)常用到類似appSettings配置節(jié)的鍵值對的構(gòu)造,這時候我們就不必再自己實現(xiàn)了,我們可以直接使用現(xiàn)有的System.Configuration.NameValueConfigurationCollection類來定義一個自定義的鍵值對??梢栽贑omplex類中定義如下屬性
復(fù)制代碼 代碼如下:

[ConfigurationProperty("NVs", IsDefaultCollection = false)]
    public System.Configuration.NameValueConfigurationCollection NVs
    {
        get
        {
            return (NameValueConfigurationCollection)base["NVs"];
        }
        set
        {
            base["NVs"] = value;
        }
}

然后在配置文件的complex節(jié)中添加鍵值對配置
復(fù)制代碼 代碼如下:

<NVs>
    <add name="abc" value="123"/>
    <add name="abcd" value="12d3"/>
</NVs>

到這兒已經(jīng)基本上可以滿足所有的配置需求了。不過還有一點更大但是不復(fù)雜的概念,就是sectionGroup。我們可以自定義SectionGroup,然后在sectionGroup中配置多個section;分組對于大的應(yīng)用程序是很有意義的。
如下配置,配置了一個包含simple和一個complex兩個section的sectionGroup
復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup type="ConfigExample.Configuration.SampleSectionGroup,ConfigExample" name="sampleGroup">
      <section type="ConfigExample.Configuration.SimpleSection,ConfigExample" allowDefinition="Everywhere" name="simple" />
      <section type="ConfigExample.Configuration.ComplexSection,ConfigExample" allowDefinition="Everywhere" name="complex"/>
    </sectionGroup>
  </configSections>
  <sampleGroup>
    <simple maxValue="20" minValue="1">
    </simple>

    <complex height="190">
      <child firstName="James" lastName="Bond"/>
      <children>
        <add firstName="Zhao" lastName="yukai"/>
        <add firstName="Lee" lastName="yukai"/>
        <remove firstName="Zhao"/>
      </children>
  <NVs>
    <add name="abc" value="123"/>
    <add name="abcd" value="12d3"/>
  </NVs>
    </complex>
  </sampleGroup>
</configuration>

為了方便的存取sectionGroup中的section我們可以實現(xiàn)一個繼承自System.Configuration.ConfigurationSectionGroup類的自定義類。實現(xiàn)很簡單,就是通過基類的Sections[“sectionName”]索引器返回Section。如下:
復(fù)制代碼 代碼如下:

public class SampleSectionGroup : System.Configuration.ConfigurationSectionGroup
{
    public SimpleSection Simple
    {
        get
        {
            return (SimpleSection)base.Sections["simple"];
        }
    }

    public ComplexSection Complex
    {
        get
        {
            return (ComplexSection)base.Sections["complex"];
        }
    }
}

需要注意的是SectionGroup不能使用ConfigurationManager.GetSection(string)方法來獲得,要獲得sectionGroup必須通過Configuration類的SectionGroups[string]索引器獲得,如下示例代碼:
復(fù)制代碼 代碼如下:

SampleSectionGroup sample = (SampleSectionGroup)ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).SectionGroups["sampleGroup"];

總結(jié):
.Net framework給我們提供了一套很方便的配置庫,我們只需要繼承對應(yīng)的類簡單的配置一下就可以方便的使用在web.config或者app.config中配置的自定義節(jié)點了。
自定義配置文件節(jié)源碼

相關(guān)文章

  • asp.net core 授權(quán)詳解

    asp.net core 授權(quán)詳解

    在本篇文章里小編給大家整理了關(guān)于asp.net core 授權(quán)的相關(guān)知識點內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2020-01-01
  • 詳解asp.net core封裝layui組件示例分享

    詳解asp.net core封裝layui組件示例分享

    本篇文章主要介紹了詳解asp.net core封裝layui組件示例分享,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • ASP.NET2.0 WebRource,開發(fā)微調(diào)按鈕控件

    ASP.NET2.0 WebRource,開發(fā)微調(diào)按鈕控件

    ASP.NET2.0 WebRource,開發(fā)微調(diào)按鈕控件...
    2006-09-09
  • .net core并發(fā)下線程安全問題詳解

    .net core并發(fā)下線程安全問題詳解

    這篇文章主要給大家介紹了關(guān)于.net core并發(fā)下線程安全問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用.net core具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Asp.net Core項目配置HTTPS支持

    Asp.net Core項目配置HTTPS支持

    這篇文章介紹了Asp.net Core項目配置HTTPS支持的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • IdentityServer4實現(xiàn).Net Core API接口權(quán)限認(rèn)證(快速入門)

    IdentityServer4實現(xiàn).Net Core API接口權(quán)限認(rèn)證(快速入門)

    這篇文章主要介紹了IdentityServer4實現(xiàn).Net Core API接口權(quán)限認(rèn)證,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • .NET操作Excel實例分享

    .NET操作Excel實例分享

    這篇文章主要介紹了.NET操作Excel實例,有需要的朋友可以參考一下
    2014-01-01
  • ASP.NET Core項目中集成TypeScript

    ASP.NET Core項目中集成TypeScript

    這篇文章介紹了ASP.NET Core項目中集成TypeScript的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • .Net 如何限制用戶登錄的方法

    .Net 如何限制用戶登錄的方法

    這篇文章主要介紹了.Net 如何限制用戶登錄的方法,有需要的朋友可以參考一下
    2013-12-12
  • 防SQL注入 生成參數(shù)化的通用分頁查詢語句

    防SQL注入 生成參數(shù)化的通用分頁查詢語句

    前些時間看了玉開兄的“如此高效通用的分頁存儲過程是帶有sql注入漏洞的”這篇文章,才突然想起某個項目也是使用了累似的通用分頁存儲過程。
    2010-07-07

最新評論

浮山县| 安新县| 平邑县| 新闻| 沙坪坝区| 甘孜| 南京市| 土默特左旗| 罗源县| 扬中市| 越西县| 泗阳县| 邹平县| 潼关县| 东台市| 鄂尔多斯市| 河东区| 漾濞| 贡山| 安新县| 抚松县| 镇江市| 丰镇市| 花莲县| 武义县| 方山县| 柘城县| 乐陵市| 肃宁县| 北流市| 乡宁县| 团风县| 阜南县| 武定县| 门源| 大邑县| 中方县| 高平市| 瓮安县| 三江| 彰武县|