terça-feira, 27 de outubro de 2009

Criando novas sessões no Web.Config (custom web.config section)



Neste artigo mostraremos como personalizar uma section da maneira que sua aplicação necessita.

1. Web.Config

No web.config de sua aplicação, começaremos declarando a nova section a ser utilizada.
Chamaremos ela de mySection. Como nodo filho de Configuration, Adicionaremos:

<configSections>

    <section name="mySection" type="MySectionClass"/>
  
</configSections>

Onde name é o nome da section que deverá ser escrita no Web.Config e MySectionClass é a classe que implementa essa sessão do web.config.

2. A classe MySectionClass.cs

Adicionaremos ao nosso projeto uma nova classe chamada MySectionClass.cs que implementa a interface IConfigurationSectionHandler

//custom web.config section

public class MySectionClass: Hashtable, IConfigurationSectionHandler
{
#region IConfigurationSectionHandler Members

public object Create(object parent, object configContext, System.Xml.XmlNode section)
{
XmlNodeList NodeSettings = section.SelectNodes("/mysection/*");
foreach (XmlNode NodeSetting in NodeSettings)
{
this.Add(NodeSetting.Attributes.GetNamedItem("name").Value.ToString(), NodeSetting.Attributes.GetNamedItem("value").Value);
}
return this;

}

#endregion
}

Essa classe buscará no Web.Config o XPath /mysection/* e buscará todos em todos os nodos filhos os atributos name e value.


3. Voltando ao Web.Config

Após o appSettings, vamos iniciar a declaração dos itens que terá nossa configuração. Adicionando as seguintes linhas:

<mySection>

<add name="teste1" value="Valor de Teste 1" />

<add name="teste2" value="Valor de Teste 2" />

<add name="teste3" value="Valor de Teste 3" />

</mySection>

Você poderá definir os valores para cada atributo nessa parte.

4.Lendo a nova section em sua aplicação


Sempre que precisar ler essa nova sessão em seu web.config, voce deve delarar o tipo conforme definido no type="MySectionClass":

MySectionClass msc = (MySectionClass)WebConfigurationManager.GetSection("mySection");
Response.Write(msc["teste1"].ToString());
//output "Valor de Teste 1


Espero ter ajudado.

0 comentários:

Postar um comentário