Esse artigo faz parte da revista .NET Magazine edição 61. Clique aqui para ler todos os artigos desta edição

 

rma para manter seus dados de configurações personalizadas. Com o tempo e com novas necessidades, surgiram outras formas de armazenar configurações, como o registry do Windows e a utilização de arquivos no formato XML. A principal vantagem dos arquivos XML sobre os arquivos INI é a possibilidade de se definir estruturas complexas com vários níveis, uma vez que os arquivos INI são tipicamente limitados a dois níveis de estrutura (seções e chaves). A Listagem 1 mostra um exemplo de um arquivo de configuração em XML.

 

Listagem 1. Exemplo de configuração personalizada

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <configSections>

   <section name="internetSearcher" type="InternetSearcher.SearchConfig, InternetSearcher, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>

  </configSections>

  <internetSearcher defaultProvider="GOOGLE">

   <log enabled="true" file="c:\logs\queries.txt" />

   <searchProviders>

     <add name="GOOGLE" url="http://www.google.com.br/search?q={0}" />

     <add name="MSN" url="http://search.live.com/results.aspx?q={0}" />

     <add name="UOL" url="http://mundo.busca.uol.com.br/buscar.html?q={0}" />

   </searchProviders>

  </internetSearcher>

</configuration>

 

Nota do DevMan

O .NET abraçou a idéia de utilizar arquivos XML para armazenar suas configurações desde as primeiras versões, sendo que eles possuem a extensão “config”. Vemos em aplicações que geram arquivos executáveis (WindowsForms, Console, Windows Services, etc) que estes arquivos ganham o nome da aplicação mais a extensão “config”, por exemplo “MinhaApp.exe.config”. Em aplicações web, este arquivo ganha o nome de “web.config”.

 

Observe o formato XML, contendo vários elementos aninhados. É dessa forma que cada informação é relacionada com as informações hierarquicamente superior e inferiores, montando uma estrutura poderosa e flexível de dados. Como já foi mencionado um arquivo de configuração pode conter várias seções, e o .NET já disponibiliza algumas para diversas finalidades. Um exemplo é a configuração da Listagem 2.

 

Listagem 2. Configuração para envio de e-mail no .NET

<system.net>

  <mailSettings>

   <smtp deliveryMethod="Network">

     <network host="smtp.meudominio.com.br" userName ="meuemail@ meudominio.com.br" password ="minhasenha" port="25"/>

   </smtp>

  </mailSettings>

</system.net>

 

Essa seção trata dos dados necessários para enviarmos um e-mail utilizando as classes do namespace System.Net.Mail. Veja que estão definidos todos os dados necessários para o envio de mensagens: o endereço do servidor de SMTP, o remetente, etc. Depois no código a seguir, vemos o código que faz o envio:

 

System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();

msg.To.Add("fabiogouw@hotmail.com");

msg.Subject = "Assunto da mensagem";

msg.Body = "Corpo da mensagem";

System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();

smtp.Send(msg);

 

Note que não precisamos nos preocupar em informar os dados de SMTP no código, já que os mesmos são recuperados do arquivo de configuração. Trabalhar dessa forma é uma boa prática, pois se tivermos que mudar o servidor de SMTP, nós não precisaremos compilar novamente o código.

Neste artigo veremos como trabalhar com as classes do .NET para a criar e ler configurações personalizadas e também algumas dicas para tirar o melhor proveito no seu uso.

 

Mão na massa

Vamos construir um exemplo que constitui de uma tela que permita escolher um site para efetuar uma pesquisa na Internet e executá-la diretamente nessa aplicação. Para isso, precisamos ter listados todos os sites que iremos utilizar e quais são as suas respectivas urls que nos permitam esta pesquisa. Para adicionar um pouco de complexidade na aplicação, vamos acrescentar um log das pesquisas que foram feitas. Crie um novo projeto Windows Forms no seu Visual Studio, salve a solução como InternetSearcher. Veja o foi criado automaticamente um arquivo de configuração, InternetSearcher.exe.config.

 

Definindo a estrutura da configuração em XML

É importante definir a estrutura do arquivo de configuração para termos um ponto de partida na construção de nossas classes. Basicamente você terá que definir entre elementos de configuração, que representam um conjunto único de informações, e as coleções desses elementos. Este passo já foi feito ao definirmos nosso exemplo. No nosso exemplo temos um elemento de configuração que representa os dados necessários para um site de busca, o SearchProvider. No entanto, dadas as regras de negócio da nossa aplicação, precisaremos ter vários elementos desse tipo, um para cada site de busca que iremos utilizar. Por causa disso precisamos de uma coleção para manter esses dados. É como se a coleção fosse uma tabela e cada linha dessa tabela fosse um elemento de configuração. E para mostrar que essa analogia com bancos de dados é forte, também vemos que os elementos de configuração possuem sua “chave primária”. No exemplo, é o nome do site de busca utilizado, GOOGLE, MSN, UOL, etc.

Já o elemento de configuração que representa os dados necessários para fazermos o log das palavras que pesquisamos, o elemento log, por ser único para toda a aplicação, aparece apenas uma vez não necessitando ser armazenado em uma coleção, logo chegamos a uma definição de estrutura como na Listagem 3.

 

Listagem 3. Estrutura básica da configuração personalizada

  <internetSearcher defaultProvider="GOOGLE"> ...

Quer ler esse conteúdo completo? Tenha acesso completo