Como: Criar usando ConfigurationSection Custom configuração Sections

Você pode estender o conjunto padrão de definições de configuração ASP.NET com elementos de configuração XML de sua preferência.Para fazer isso, você deve criar seu próprio manipulador da seção de configuração.

O manipulador deve ser uma classe do .NET Framework que implementa a classe System.Configuration.ConfigurationSection.

Observação:

Nas versões do .NET Framework 1.0 e 1.1, um manipulador da seção de configuração tinha que implementam a interface System.Configuration.IConfigurationSectionHandler, que agora é substituída.No entanto, um exemplo de código existe no Como: Criar Custom configuração Sections usando IConfigurationSectionHandler.

O manipulador de seção interpreta e processa as configurações definidas em elementos de configuração XML dentro de uma porção específica de um arquivo Web.config e retorna um objeto de configuração apropriado com base nas definições de configuração.O objeto de configuração que a classe do manipulador retorna pode ser qualquer estrutura de dados; ele não está limitado a nenhuma classe base de configuração ou formato de configuração.O ASP.NET usa o objeto de configuração para ler e gravar no seu elemento de configuração personalizado.

Para criar um manipulador da seção de configuração personalizado

  1. Crie uma classe pública que herda da classe System.Configuration.ConfigurationSection, conforme ilustrado no exemplo de código a seguir.

    Imports System
    Imports System.Collections
    Imports System.Text
    Imports System.Configuration
    Imports System.Xml
    
    Namespace MyConfigSectionHandler
    
        Public Class MyHandler
            Inherits ConfigurationSection
    
            Public Sub New()
            End Sub
    
            ' Add declarations for child elements and attributes like this:
            '<ConfigurationProperty("<propertyName>", <named parameters>)> _
            'Public Property MyAttrib1() As <type>
            '    Get
            '        Return CStr(Me("<propertyName>"))
            '    End Get
            '    Set(ByVal value As <type>)
            '        Me("<propertyName>") = value
            '    End Set
            'End Property
    
        End Class
    End Namespace
    
    using System;
    using System.Collections;
    using System.Text;
    using System.Configuration;
    using System.Xml;
    
    namespace MyConfigSectionHandler
    {
        public class MyHandler : ConfigurationSection
        {
            public MyHandler()
            {
            }
    
            // Add declarations for child elements and attributes like this:
            // [ConfigurationProperty("<propertyName>", <named parameters>)]
            // public <type> <PropertyName>
            // {
            //     get { return (<type>)this["<propertyName>"]; }
            //     set { this["<propertyName>"] = value; }
            // }
        }
    }
    
  2. Adicione seu próprio código para executar o trabalho de configuração que desejar.

    Por exemplo, você pode substituir o código comentado pelo código a seguir, que obtém os valores de sua seção personalizada.

    Imports System
    Imports System.Collections
    Imports System.Text
    Imports System.Configuration
    Imports System.Xml
    
    Namespace MyConfigSectionHandler
    
        Public Class MyHandler
            Inherits ConfigurationSection
    
            Public Sub New()
            End Sub
    
            Public Sub New(ByVal attribVal As String)
                MyAttrib1 = attribVal
            End Sub
    
            <ConfigurationProperty("myAttrib1", DefaultValue:="Clowns", IsRequired:=True)> _
            <StringValidator(InvalidCharacters:="~!@#$%^&*()[]{}/;'\|\\", MinLength:=1, MaxLength:=60)> _
            Public Property MyAttrib1() As String
                Get
                    Return CStr(Me("myAttrib1"))
                End Get
                Set(ByVal value As String)
                    Me("myAttrib1") = value
                End Set
            End Property
    
            <ConfigurationProperty("myChildSection")> _
            Public Property MyChildSection() As MyChildConfigElement
                Get
                    Return CType(Me("myChildSection"), MyChildConfigElement)
                End Get
                Set(ByVal value As MyChildConfigElement)
                    Me("myChildSection") = CType(value, MyChildConfigElement)
                End Set
            End Property
        End Class
    
        Public Class MyChildConfigElement
            Inherits ConfigurationElement
    
            Public Sub New()
            End Sub
    
            Public Sub New( _
            ByVal a1 As String, ByVal a2 As String)
                MyChildAttribute1 = a1
                MyChildAttribute2 = a2
            End Sub
    
            <ConfigurationProperty("myChildAttrib1", DefaultValue:="Zippy", IsRequired:=True)> _
            <StringValidator(InvalidCharacters:="~!@#$%^&*()[]{}/;'\|\\", MinLength:=1, MaxLength:=60)> _
            Public Property MyChildAttribute1() As String
                Get
                    Return CStr(Me("myChildAttrib1"))
                End Get
                Set(ByVal value As String)
                    Me("myChildAttrib1") = value
                End Set
            End Property
    
            <ConfigurationProperty("myChildAttrib2", DefaultValue:="Michael Zawondy", IsRequired:=True)> _
            <StringValidator(InvalidCharacters:="~!@#$%^&*()[]{}/;'\|\\", MinLength:=1, MaxLength:=60)> _
            Public Property MyChildAttribute2() As String
                Get
                    Return CStr(Me("myChildAttrib2"))
                End Get
                Set(ByVal value As String)
                    Me("myChildAttrib2") = value
                End Set
            End Property
    
        End Class
    End Namespace
    
    using System;
    using System.Collections;
    using System.Text;
    using System.Configuration;
    using System.Xml;
    
    namespace MyConfigSectionHandler
    {
        public class MyHandler : ConfigurationSection
        {
            public MyHandler()
            {
            }
    
            public MyHandler(String attribVal)
            {
                MyAttrib1 = attribVal;
            }
    
            [ConfigurationProperty("myAttrib1", DefaultValue = "Clowns", IsRequired = true)]
            [StringValidator(InvalidCharacters = "~!@#$%^&*()[]{}/;'\"|\\", MinLength = 1, MaxLength = 60)]
            public String MyAttrib1
            {
                get
                { return (String)this["myAttrib1"]; }
                set
                { this["myAttrib1"] = value; }
            }
    
            [ConfigurationProperty("myChildSection")]
            public MyChildConfigElement MyChildSection
            {
                get
                { return (MyChildConfigElement)this["myChildSection"]; }
                set
                { this["myChildSection"] = value; }
            }
        }
    
        public class MyChildConfigElement : ConfigurationElement
        {
            public MyChildConfigElement()
            {
            }
    
            public MyChildConfigElement(String a1, String a2)
            {
                MyChildAttribute1 = a1;
                MyChildAttribute2 = a2;
            }
    
            [ConfigurationProperty("myChildAttrib1", DefaultValue = "Zippy", IsRequired = true)]
            [StringValidator(InvalidCharacters = "~!@#$%^&*()[]{}/;'\"|\\", MinLength = 1, MaxLength = 60)]
            public String MyChildAttribute1
            {
                get
                { return (String)this["myChildAttrib1"]; }
                set
                { this["myChildAttrib1"] = value; }
            }
    
            [ConfigurationProperty("myChildAttrib2", DefaultValue = "Michael Zawondy", IsRequired = true)]
            [StringValidator(InvalidCharacters = "~!@#$%^&*()[]{}/;'\"|\\", MinLength = 1, MaxLength = 60)]
            public String MyChildAttribute2
            {
                get
                { return (String)this["myChildAttrib2"]; }
                set
                { this["myChildAttrib2"] = value; }
            }
        }
    }
    

    Este exemplo usa o modelo declarativo.A classe System.Configuration.ConfigurationSection também pode ser implementada usando o modelo através de programação.Por exemplo, consulte o tópico com a visão geral da classe System.Configuration.ConfigurationSection e Classes Usadas para Criar Manipuladores de Seção Personalizados..

    Para fins de comparação, este exemplo é semelhante ao código em Como: Criar Custom configuração Sections usando IConfigurationSectionHandler.No entanto, herdar da classe System.Configuration.ConfigurationSection permite exercer um melhor controle do seu manipulador de seção.Por exemplo, o arquivo de configuração no próximo procedimento dá permissão a um elemento filho chamado myChildSection para o qual o código anterior declara um ConfigurationProperty e define uma classe derivada de ConfigurationElement.Além disso, o encapsulamento da coleção de funcionalidade na classe ConfigurationElementCollection permite que você facilmente crie elementos de coleção que podem empregar elementos adicionar, remover e limpar em um arquivo de configuração.Para mais informações e exemplos, consulte ConfigurationElementCollection.

Para adicionar um manipulador de seção personalizado a um arquivo de configuração do ASP.NET

  1. Adicione um elemento sectionGroup e um elemento section ao seu arquivo Web.config dentro do elemento configSections, conforme ilustrado no exemplo de código a seguir.É essa declaração que associa o manipulador de seção personalizado ao nome da seção.

    Observação:

    Aninhar um elemento section em um sectionGroup é opcional, mas é recomendável para ajudá-lo a organizar melhor os dados de configuração.

    Você pode adicionar declaração do manipulador de seção em um arquivo de configuração diferente daquele onde você adiciona os seus elementos de configuração personalizada garantindo que a arquivo de configuração onde o manipulador de seção é declarado é superior na hierarquia do arquivo de configuração.Para obter mais informações, consulte Hierarquia e Herança do Arquivo de Configuração do ASP.NET.

    O atributo type do elemento section deve coincidir com o manifesto do conjunto de módulos (assembly) ou haverá um erro de configuração.O próprio arquivo do conjunto de módulos (assembly) deve estar no mesmo diretório de aplicativo ASP.NET que o arquivo Web.config que o define.

    <configuration>
    
    <!-- Configuration section-handler declaration area. -->
      <configSections>
        <sectionGroup name="myCustomGroup">
          <section 
            name="myCustomSection" 
            type="MyConfigSectionHandler.MyHandler, MyCustomConfigurationHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 
            allowLocation="true" 
            allowDefinition="Everywhere"
          />
        </sectionGroup>
          <!-- Other <section> and <sectionGroup> elements. -->
      </configSections>
    
      <!-- Configuration section settings area. -->
    
    </configuration>
    
  2. Adicione seus elementos de configuração personalizada na área de definições da seção de configuração do seu arquivo Web.config.

    <configuration>
    
    <!-- Configuration section-handler declaration area. -->
    
      <!-- Configuration section settings area. -->
      <myCustomGroup>
        <myCustomSection myAttrib1="Clowns">
          <myChildSection 
              myChildAttrib1="Zippy" 
              myChildAttrib2="Michael Zawondy "/>
        </myCustomSection>
      </myCustomGroup>
    
      <!-- Other configuration settings, like <system.web> -->
    
    </configuration>
    

Para acessar os dados de configuração personalizada por meio de programação.

  • Obtenha uma instância do seu objeto de configuração personalizada e use o método GetSection ou o método GetSection para preenchê-la.

    O exemplo a seguir de uma página ASPX funciona com os exemplos anteriores para enumerar os atributos e elementos filho da seção de configuração personalizada.

    <%@ Page Language="C#" %>
    
    <script >
        protected void Button1_Click(object sender, EventArgs e)
        {
            MyConfigSectionHandler.MyHandler config =
                (MyConfigSectionHandler.MyHandler)System.Configuration.ConfigurationManager.GetSection(
                "myCustomGroup/myCustomSection");
    
            StringBuilder sb = new StringBuilder();
    
            sb.Append("<h2>Attributes in the myCustomSection Element:</h2>");
            sb.AppendFormat("myAttrib1 = {0}<br/>", config.MyAttrib1.ToString());
            sb.Append("<h2>Attributes in the myChildSection Element:</h2>");
            sb.AppendFormat("myChildAttrib1 = {0}<br/>", config.MyChildSection.MyChildAttribute1.ToString());
            sb.AppendFormat("myChildAttrib2 = {0}<br/>", config.MyChildSection.MyChildAttribute2.ToString());
    
            Label1.Text = sb.ToString();
            Label1.Visible = true;
        }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head >
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" >
        <div>
    
        <h1>Enumerate MyCustomSection</h1>
        <asp:Label ID="Label1"  
            Text="" />
        <br />
        <asp:Button ID="Button1"  
            Text="Get Custom Config Info" 
            OnClick="Button1_Click" />
    
        </div>
        </form>
    </body>
    </html>
    
    <%@ Page Language="VB" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script >
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim config As New MyConfigSectionHandler.MyHandler
            config = _
                System.Configuration.ConfigurationManager.GetSection("myCustomGroup/myCustomSection")
            Dim sb As New StringBuilder
            sb.Append("<h2>Attributes in the myCustomSection Element:</h2>")
            sb.AppendFormat("myAttrib1 = {0}<br/>", config.MyAttrib1.ToString())
            sb.Append("<h2>Attributes in the myChildSection Element:</h2>")
            sb.AppendFormat("myChildAttrib1 = {0}<br/>", config.MyChildSection.MyChildAttribute1.ToString())
            sb.AppendFormat("myChildAttrib2 = {0}<br/>", config.MyChildSection.MyChildAttribute2.ToString())
    
            Label1.Text = sb.ToString()
            Label1.Visible = True
    
        End Sub
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head >
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" >
        <div>
    
        <h1>Enumerate MyCustomSection</h1>
        <asp:Label ID="Label1"  
            Text=""/>
        <br />
        <asp:Button ID="Button1"  
            Text="Get Custom Config Info" 
            OnClick="Button1_Click" />
    
        </div>
        </form>
    </body>
    </html>
    

Consulte também

Conceitos

ASP.NET Configuration File Structure (Sections and Section Handlers)

Visão Geral da Configuração ASP.NET

Outros recursos

Administrando ites da Web do ASP.NET

Configurando aplicativos