ConfigurationElement Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Representa um elemento de configuração em um arquivo de configuração.
public ref class ConfigurationElement abstract
public abstract class ConfigurationElement
type ConfigurationElement = class
Public MustInherit Class ConfigurationElement
- Herança
-
ConfigurationElement
- Derivado
Exemplos
O exemplo de código a seguir mostra como implementar um personalizado ConfigurationElement como um elemento individual em uma seção personalizada e como uma coleção de elementos em uma seção personalizada. O exemplo consiste nos seguintes arquivos:
Um arquivo app.config que contém uma seção personalizada chamada
MyUrls
. Esta seção contém um elemento simples (não contém nenhum outro elemento) e uma coleção de elementos. O elemento simples é nomeadosimple
e a coleção é chamadaurls
de .Um aplicativo de console. O aplicativo lê o conteúdo do arquivo app.config e grava as informações no console. Ele usa classes que derivam de ConfigurationElement, ConfigurationElementCollectione ConfigurationSection.
Uma classe chamada
UrlsSection
que deriva da ConfigurationSection classe . Essa classe é usada para acessar aMyUrls
seção no arquivo de configuração.Uma classe chamada
UrlsCollection
que deriva da ConfigurationElementCollection classe . Essa classe é usada para acessar aurls
coleção no arquivo de configuração.Uma classe chamada
UrlConfigElement
que deriva da ConfigurationElement classe . Essa classe é usada para acessar osimple
elemento e os membros daurls
coleção no arquivo de configuração.
Para executar o exemplo, execute as seguintes etapas:
Crie uma solução que tenha um projeto de aplicativo de console e um projeto de biblioteca de classes chamado
ConfigurationElement
.Coloque os três arquivos de classe no projeto da biblioteca de classes e coloque os outros arquivos no projeto da biblioteca de console.
Em ambos os projetos, defina uma referência como
System.Configuration
.No projeto de aplicativo de console, defina uma referência de projeto para o projeto de biblioteca de classes.
// Set Assembly name to ConfigurationElement
using System;
using System.Configuration;
using System.Collections;
namespace Samples.AspNet
{
// Entry point for console application that reads the
// app.config file and writes to the console the
// URLs in the custom section.
class TestConfigurationElement
{
static void Main(string[] args)
{
// Get current configuration file.
System.Configuration.Configuration config =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.None);
// Get the MyUrls section.
UrlsSection myUrlsSection =
config.GetSection("MyUrls") as UrlsSection;
if (myUrlsSection == null)
{
Console.WriteLine("Failed to load UrlsSection.");
}
else
{
Console.WriteLine("The 'simple' element of app.config:");
Console.WriteLine(" Name={0} URL={1} Port={2}",
myUrlsSection.Simple.Name,
myUrlsSection.Simple.Url,
myUrlsSection.Simple.Port);
Console.WriteLine("The urls collection of app.config:");
for (int i = 0; i < myUrlsSection.Urls.Count; i++)
{
Console.WriteLine(" Name={0} URL={1} Port={2}",
myUrlsSection.Urls[i].Name,
myUrlsSection.Urls[i].Url,
myUrlsSection.Urls[i].Port);
}
}
Console.ReadLine();
}
}
}
' Set Assembly name to ConfigurationElement
' and set Root namespace to Samples.AspNet
Imports System.Configuration
Imports System.Collections
Class TestConfigurationElement
' Entry point for console application that reads the
' app.config file and writes to the console the
' URLs in the custom section.
Shared Sub Main(ByVal args() As String)
' Get the current configuration file.
Dim config As System.Configuration.Configuration = _
ConfigurationManager.OpenExeConfiguration( _
ConfigurationUserLevel.None)
' Get the MyUrls section.
Dim myUrlsSection As UrlsSection = _
config.GetSection("MyUrls")
If myUrlsSection Is Nothing Then
Console.WriteLine("Failed to load UrlsSection.")
Else
Console.WriteLine("The 'simple' element of app.config:")
Console.WriteLine(" Name={0} URL={1} Port={2}", _
myUrlsSection.Simple.Name, _
myUrlsSection.Simple.Url, _
myUrlsSection.Simple.Port)
Console.WriteLine("The urls collection of app.config:")
Dim i As Integer
For i = 0 To myUrlsSection.Urls.Count - 1
Console.WriteLine(" Name={0} URL={1} Port={2}", _
i, myUrlsSection.Urls(i).Name, _
myUrlsSection.Urls(i).Url, _
myUrlsSection.Urls(i).Port)
Next i
End If
Console.ReadLine()
End Sub
End Class
using System;
using System.Configuration;
using System.Collections;
namespace Samples.AspNet
{
// Define a custom section containing an individual
// element and a collection of elements.
public class UrlsSection : ConfigurationSection
{
[ConfigurationProperty("name",
DefaultValue = "MyFavorites",
IsRequired = true,
IsKey = false)]
[StringValidator(InvalidCharacters =
" ~!@#$%^&*()[]{}/;'\"|\\",
MinLength = 1, MaxLength = 60)]
public string Name
{
get
{
return (string)this["name"];
}
set
{
this["name"] = value;
}
}
// Declare an element (not in a collection) of the type
// UrlConfigElement. In the configuration
// file it corresponds to <simple .... />.
[ConfigurationProperty("simple")]
public UrlConfigElement Simple
{
get
{
UrlConfigElement url =
(UrlConfigElement)base["simple"];
return url;
}
}
// Declare a collection element represented
// in the configuration file by the sub-section
// <urls> <add .../> </urls>
// Note: the "IsDefaultCollection = false"
// instructs the .NET Framework to build a nested
// section like <urls> ...</urls>.
[ConfigurationProperty("urls",
IsDefaultCollection = false)]
public UrlsCollection Urls
{
get
{
UrlsCollection urlsCollection =
(UrlsCollection)base["urls"];
return urlsCollection;
}
}
protected override void DeserializeSection(
System.Xml.XmlReader reader)
{
base.DeserializeSection(reader);
// You can add custom processing code here.
}
protected override string SerializeSection(
ConfigurationElement parentElement,
string name, ConfigurationSaveMode saveMode)
{
string s =
base.SerializeSection(parentElement,
name, saveMode);
// You can add custom processing code here.
return s;
}
}
}
Imports System.Configuration
Imports System.Collections
' Define a custom section containing an individual
' element and a collection of elements.
Public Class UrlsSection
Inherits ConfigurationSection
<ConfigurationProperty("name", _
DefaultValue:="MyFavorites", _
IsRequired:=True, _
IsKey:=False), _
StringValidator( _
InvalidCharacters:=" ~!@#$%^&*()[]{}/;'""|\", _
MinLength:=1, MaxLength:=60)> _
Public Property Name() As String
Get
Return CStr(Me("name"))
End Get
Set(ByVal value As String)
Me("name") = value
End Set
End Property
' Declare an element (not in a collection) of the type
' UrlConfigElement. In the configuration
' file it corresponds to <simple .... />.
<ConfigurationProperty("simple")> _
Public ReadOnly Property Simple() _
As UrlConfigElement
Get
Dim url As UrlConfigElement = _
CType(Me("simple"), _
UrlConfigElement)
Return url
End Get
End Property
' Declare a collection element represented
' in the configuration file by the sub-section
' <urls> <add .../> </urls>
' Note: the "IsDefaultCollection = false"
' instructs the .NET Framework to build a nested
' section like <urls> ...</urls>.
<ConfigurationProperty("urls", _
IsDefaultCollection:=False)> _
Public ReadOnly Property Urls() _
As UrlsCollection
Get
Dim urlsCollection _
As UrlsCollection = _
CType(Me("urls"), UrlsCollection)
Return urlsCollection
End Get
End Property
Protected Overrides Sub DeserializeSection( _
ByVal reader As System.Xml.XmlReader)
MyBase.DeserializeSection(reader)
' Enter your custom processing code here.
End Sub
Protected Overrides Function SerializeSection( _
ByVal parentElement As ConfigurationElement, _
ByVal name As String, _
ByVal saveMode As ConfigurationSaveMode) As String
Dim s As String = _
MyBase.SerializeSection(parentElement, _
name, saveMode)
' Enter your custom processing code here.
Return s
End Function 'SerializeSection
End Class
using System;
using System.Configuration;
using System.Collections;
namespace Samples.AspNet
{
public class UrlsCollection : ConfigurationElementCollection
{
public UrlsCollection()
{
// Add one url to the collection. This is
// not necessary; could leave the collection
// empty until items are added to it outside
// the constructor.
UrlConfigElement url =
(UrlConfigElement)CreateNewElement();
Add(url);
}
public override
ConfigurationElementCollectionType CollectionType
{
get
{
return
ConfigurationElementCollectionType.AddRemoveClearMap;
}
}
protected override
ConfigurationElement CreateNewElement()
{
return new UrlConfigElement();
}
protected override
ConfigurationElement CreateNewElement(
string elementName)
{
return new UrlConfigElement(elementName);
}
protected override Object
GetElementKey(ConfigurationElement element)
{
return ((UrlConfigElement)element).Name;
}
public new string AddElementName
{
get
{ return base.AddElementName; }
set
{ base.AddElementName = value; }
}
public new string ClearElementName
{
get
{ return base.ClearElementName; }
set
{ base.ClearElementName = value; }
}
public new string RemoveElementName
{
get
{ return base.RemoveElementName; }
}
public new int Count
{
get { return base.Count; }
}
public UrlConfigElement this[int index]
{
get
{
return (UrlConfigElement)BaseGet(index);
}
set
{
if (BaseGet(index) != null)
{
BaseRemoveAt(index);
}
BaseAdd(index, value);
}
}
new public UrlConfigElement this[string Name]
{
get
{
return (UrlConfigElement)BaseGet(Name);
}
}
public int IndexOf(UrlConfigElement url)
{
return BaseIndexOf(url);
}
public void Add(UrlConfigElement url)
{
BaseAdd(url);
// Add custom code here.
}
protected override void
BaseAdd(ConfigurationElement element)
{
BaseAdd(element, false);
// Add custom code here.
}
public void Remove(UrlConfigElement url)
{
if (BaseIndexOf(url) >= 0)
BaseRemove(url.Name);
}
public void RemoveAt(int index)
{
BaseRemoveAt(index);
}
public void Remove(string name)
{
BaseRemove(name);
}
public void Clear()
{
BaseClear();
// Add custom code here.
}
}
}
Imports System.Configuration
Imports System.Collections
Public Class UrlsCollection
Inherits ConfigurationElementCollection
Public Sub New()
' Add one url to the collection. This is
' not necessary; could leave the collection
' empty until items are added to it outside
' the constructor.
Dim url As UrlConfigElement = _
CType(CreateNewElement(), UrlConfigElement)
' Add the element to the collection.
Add(url)
End Sub
Public Overrides ReadOnly Property CollectionType() _
As ConfigurationElementCollectionType
Get
Return ConfigurationElementCollectionType.AddRemoveClearMap
End Get
End Property
Protected Overloads Overrides Function CreateNewElement() _
As ConfigurationElement
Return New UrlConfigElement()
End Function 'CreateNewElement
Protected Overloads Overrides Function CreateNewElement( _
ByVal elementName As String) _
As ConfigurationElement
Return New UrlConfigElement(elementName)
End Function 'CreateNewElement
Protected Overrides Function GetElementKey( _
ByVal element As ConfigurationElement) As [Object]
Return CType(element, UrlConfigElement).Name
End Function 'GetElementKey
Public Shadows Property AddElementName() As String
Get
Return MyBase.AddElementName
End Get
Set(ByVal value As String)
MyBase.AddElementName = value
End Set
End Property
Public Shadows Property ClearElementName() As String
Get
Return MyBase.ClearElementName
End Get
Set(ByVal value As String)
MyBase.ClearElementName = value
End Set
End Property
Public Shadows ReadOnly Property RemoveElementName() As String
Get
Return MyBase.RemoveElementName
End Get
End Property
Public Shadows ReadOnly Property Count() As Integer
Get
Return MyBase.Count
End Get
End Property
Default Public Shadows Property Item( _
ByVal index As Integer) As UrlConfigElement
Get
Return CType(BaseGet(index), UrlConfigElement)
End Get
Set(ByVal value As UrlConfigElement)
If Not (BaseGet(index) Is Nothing) Then
BaseRemoveAt(index)
End If
BaseAdd(index, value)
End Set
End Property
Default Public Shadows ReadOnly Property Item( _
ByVal Name As String) As UrlConfigElement
Get
Return CType(BaseGet(Name), UrlConfigElement)
End Get
End Property
Public Function IndexOf( _
ByVal url As UrlConfigElement) As Integer
Return BaseIndexOf(url)
End Function 'IndexOf
Public Sub Add(ByVal url As UrlConfigElement)
BaseAdd(url)
' Add custom code here.
End Sub
Protected Overrides Sub BaseAdd( _
ByVal element As ConfigurationElement)
BaseAdd(element, False)
' Add custom code here.
End Sub
Public Overloads Sub Remove( _
ByVal url As UrlConfigElement)
If BaseIndexOf(url) >= 0 Then
BaseRemove(url.Name)
End If
End Sub
Public Sub RemoveAt(ByVal index As Integer)
BaseRemoveAt(index)
End Sub
Public Overloads Sub Remove(ByVal name As String)
BaseRemove(name)
End Sub
Public Sub Clear()
BaseClear()
End Sub
End Class
using System;
using System.Configuration;
using System.Collections;
namespace Samples.AspNet
{
public class UrlConfigElement : ConfigurationElement
{
// Constructor allowing name, url, and port to be specified.
public UrlConfigElement(String newName,
String newUrl, int newPort)
{
Name = newName;
Url = newUrl;
Port = newPort;
}
// Default constructor, will use default values as defined
// below.
public UrlConfigElement()
{
}
// Constructor allowing name to be specified, will take the
// default values for url and port.
public UrlConfigElement(string elementName)
{
Name = elementName;
}
[ConfigurationProperty("name",
DefaultValue = "Microsoft",
IsRequired = true,
IsKey = true)]
public string Name
{
get
{
return (string)this["name"];
}
set
{
this["name"] = value;
}
}
[ConfigurationProperty("url",
DefaultValue = "http://www.microsoft.com",
IsRequired = true)]
[RegexStringValidator(@"\w+:\/\/[\w.]+\S*")]
public string Url
{
get
{
return (string)this["url"];
}
set
{
this["url"] = value;
}
}
[ConfigurationProperty("port",
DefaultValue = (int)0,
IsRequired = false)]
[IntegerValidator(MinValue = 0,
MaxValue = 8080, ExcludeRange = false)]
public int Port
{
get
{
return (int)this["port"];
}
set
{
this["port"] = value;
}
}
protected override void DeserializeElement(
System.Xml.XmlReader reader,
bool serializeCollectionKey)
{
base.DeserializeElement(reader,
serializeCollectionKey);
// You can your custom processing code here.
}
protected override bool SerializeElement(
System.Xml.XmlWriter writer,
bool serializeCollectionKey)
{
bool ret = base.SerializeElement(writer,
serializeCollectionKey);
// You can enter your custom processing code here.
return ret;
}
protected override bool IsModified()
{
bool ret = base.IsModified();
// You can enter your custom processing code here.
return ret;
}
}
}
Imports System.Configuration
Imports System.Collections
Public Class UrlConfigElement
Inherits ConfigurationElement
' Constructor allowing name, url, and port to be specified.
Public Sub New(ByVal newName As String, _
ByVal newUrl As String, _
ByVal newPort As Integer)
Name = newName
Url = newUrl
Port = newPort
End Sub
' Default constructor, will use default values as defined
Public Sub New()
End Sub
' Constructor allowing name to be specified, will take the
' default values for url and port.
Public Sub New(ByVal elementName As String)
Name = elementName
End Sub
<ConfigurationProperty("name", _
DefaultValue:="Microsoft", _
IsRequired:=True, _
IsKey:=True)> _
Public Property Name() As String
Get
Return CStr(Me("name"))
End Get
Set(ByVal value As String)
Me("name") = value
End Set
End Property
<ConfigurationProperty("url", _
DefaultValue:="http://www.microsoft.com", _
IsRequired:=True), _
RegexStringValidator("\w+:\/\/[\w.]+\S*")> _
Public Property Url() As String
Get
Return CStr(Me("url"))
End Get
Set(ByVal value As String)
Me("url") = value
End Set
End Property
<ConfigurationProperty("port", _
DefaultValue:=0, _
IsRequired:=False), _
IntegerValidator(MinValue:=0, _
MaxValue:=8080, ExcludeRange:=False)> _
Public Property Port() As Integer
Get
Return Fix(Me("port"))
End Get
Set(ByVal value As Integer)
Me("port") = value
End Set
End Property
Protected Overrides Sub DeserializeElement(ByVal reader _
As System.Xml.XmlReader, _
ByVal serializeCollectionKey As Boolean)
MyBase.DeserializeElement(reader, _
serializeCollectionKey)
' Enter your custom processing code here.
End Sub
Protected Overrides Function SerializeElement(ByVal writer _
As System.Xml.XmlWriter, _
ByVal serializeCollectionKey As Boolean) As Boolean
Dim ret As Boolean = _
MyBase.SerializeElement(writer, serializeCollectionKey)
' Enter your custom processing code here.
Return ret
End Function 'SerializeElement
Protected Overrides Function IsModified() As Boolean
Dim ret As Boolean = MyBase.IsModified()
' Enter your custom processing code here.
Return ret
End Function 'IsModified
End Class
Comentários
O ConfigurationElement é uma classe abstrata usada para representar um elemento XML em um arquivo de configuração (como Web.config). Um elemento em um arquivo de configuração pode conter zero, um ou mais elementos filho.
Como a ConfigurationElement classe é definida como abstrata, você não pode criar uma instância dela. Você só pode derivar classes dele. O .NET Framework inclui classes que derivam da ConfigurationElement classe para representar elementos de configuração XML padrão, como ConfigurationSection. Você também pode estender a ConfigurationElement classe para acessar seções e elementos de configuração personalizados. O exemplo incluído posteriormente neste tópico mostra como acessar elementos e seções de configuração personalizados usando classes personalizadas derivadas de ConfigurationElement.
Você também pode estender os tipos de configuração padrão, como ConfigurationElement, ConfigurationElementCollectionConfigurationProperty, e ConfigurationSection. Para obter mais informações, consulte a documentação dessas classes.
Para obter mais informações sobre como acessar informações em arquivos de configuração, consulte a ConfigurationManager classe e a WebConfigurationManager classe .
Notas aos Implementadores
Cada ConfigurationElement objeto cria uma coleção interna ConfigurationPropertyCollection de ConfigurationProperty objetos que representa os atributos de elemento ou uma coleção de elementos filho.
Informações e funcionalidades não personalizáveis estão contidas em um ElementInformation objeto fornecido pela ElementInformation propriedade .
Você pode usar um modelo de codificação programático ou declarativo (atribuído) para criar um elemento de configuração personalizado:
O modelo programático exige que, para cada atributo de elemento, você crie uma propriedade para obter ou definir seu valor e adicioná-la ao recipiente de propriedades interna da classe base subjacente ConfigurationElement . Para obter um exemplo de como usar esse modelo, consulte a ConfigurationSection classe .
O modelo declarativo mais simples, também chamado de modelo atribuído, permite que você defina um atributo de elemento usando uma propriedade e, em seguida, decore-o com atributos. Esses atributos instruem o sistema de configuração ASP.NET sobre os tipos de propriedade e seus valores padrão. Com essas informações, obtidas por meio da reflexão, o sistema de configuração de ASP.NET cria os objetos de propriedade do elemento para você e executa a inicialização necessária. O exemplo mostrado posteriormente neste tópico mostra como usar esse modelo.
Construtores
ConfigurationElement() |
Inicializa uma nova instância da classe ConfigurationElement. |
Propriedades
CurrentConfiguration |
Obtém uma referência para a instância Configuration de nível superior que representa a hierarquia de configuração à qual a instância atual ConfigurationElement pertence. |
ElementInformation |
Obtém um objeto ElementInformation que contém as informações não personalizáveis e a funcionalidade do objeto ConfigurationElement. |
ElementProperty |
Obtém o objeto ConfigurationElementProperty que representa o próprio objeto ConfigurationElement. |
EvaluationContext |
Obtém o objeto ContextInformation para o objeto ConfigurationElement. |
HasContext |
Obtém um valor que indica se a propriedade CurrentConfiguration é |
Item[ConfigurationProperty] |
Obtém ou define uma propriedade ou um atributo desse elemento de configuração. |
Item[String] |
Obtém ou define uma propriedade, atributo ou elemento filho desse elemento de configuração. |
LockAllAttributesExcept |
Obtém a coleção de atributos bloqueados. |
LockAllElementsExcept |
Obtém a coleção de elementos bloqueados. |
LockAttributes |
Obtém a coleção de atributos bloqueados. |
LockElements |
Obtém a coleção de elementos bloqueados. |
LockItem |
Obtém ou define um valor que indica se o elemento está bloqueado. |
Properties |
Obtém a coleção de propriedades. |
Métodos
DeserializeElement(XmlReader, Boolean) |
Lê o XML do arquivo de configuração. |
Equals(Object) |
Compara a instância ConfigurationElement atual com o objeto especificado. |
GetHashCode() |
Obtém um valor exclusivo que representa a instância ConfigurationElement atual. |
GetTransformedAssemblyString(String) |
Retorna a versão transformada do nome do assembly especificado. |
GetTransformedTypeString(String) |
Retorna a versão transformada do nome do tipo especificado. |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
Init() |
Define o objeto ConfigurationElement para seu estado inicial. |
InitializeDefault() |
Usado para inicializar um conjunto padrão de valores para o objeto ConfigurationElement. |
IsModified() |
Indica se este elemento de configuração foi modificado desde a última vez em que foi salvo ou carregado quando implementado em uma classe derivada. |
IsReadOnly() |
Obtém um valor que indica se o objeto ConfigurationElement é somente leitura. |
ListErrors(IList) |
Adiciona os erros de propriedade inválida deste objeto ConfigurationElement e de todos os subelementos à lista passada. |
MemberwiseClone() |
Cria uma cópia superficial do Object atual. (Herdado de Object) |
OnDeserializeUnrecognizedAttribute(String, String) |
Obtém um valor que indica se um atributo desconhecido é encontrado durante a desserialização. |
OnDeserializeUnrecognizedElement(String, XmlReader) |
Obtém um valor que indica se um elemento desconhecido é encontrado durante a desserialização. |
OnRequiredPropertyNotFound(String) |
Gera uma exceção quando uma propriedade necessária não é encontrada. |
PostDeserialize() |
Chamado depois da desserialização. |
PreSerialize(XmlWriter) |
Chamado antes da serialização. |
Reset(ConfigurationElement) |
Redefine o estado interno do objeto ConfigurationElement, incluindo os bloqueios e as coleções de propriedades. |
ResetModified() |
Redefine o valor do método IsModified() para |
SerializeElement(XmlWriter, Boolean) |
Grava o conteúdo desse elemento de configuração no arquivo de configuração quando implementado em uma classe derivada. |
SerializeToXmlElement(XmlWriter, String) |
Grava as marcas externas desse elemento de configuração no arquivo de configuração quando implementado em uma classe derivada. |
SetPropertyValue(ConfigurationProperty, Object, Boolean) |
Define uma propriedade para o valor especificado. |
SetReadOnly() |
Define a propriedade IsReadOnly() para o objeto ConfigurationElement e para todos os subelementos. |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
Unmerge(ConfigurationElement, ConfigurationElement, ConfigurationSaveMode) |
Modifica o objeto ConfigurationElement para remover todos os valores que não devem ser salvos. |