Criando uma Seção de Configuração


A finalidade deste artigo é demonstrar como fazer isso na versão 2.0 do .NET Framework. Em primeiro lugar, devemos fazer referência à DLL System.Configuration.dll no projeto. Feito isso, já passamos a ter acesso as classes específicas para isso, que estão contidas dentro deste namespace. Em segundo lugar, devemos criar uma classe que herde diretamente da classe ConfigurationSection, qual fornece as funcionalidades básicas e representa uma seção de um arquivo de configuração.

Já com a classe pronta, devemos neste momento definir as propriedades (a nível de classe) e atributos (a nível de arquivo de configuração) que essa seção terá. Através do atributo ConfigurationPropertyAttribute, marcamos as propriedades da classe que serão representadas no arquivo de configuração. É no construtor deste mesmo atributo que informaremos o nome do atributo que deverá ser definido/mapeado no arquivo de configuração. Para ilustrar o cenário, vamos criar uma seção de configuração para um serviço qualquer, chamado de ServiceConfig, onde devemos definir o path e o valor do timeout.

using System.Configuration;

public class ServiceConfig : ConfigurationSection
{
    [ConfigurationProperty("path", DefaultValue = "", IsRequired = true)]
    public string Path
    {
        get
        {
            return (string)base["path"];
        }
    }

    [
        ConfigurationProperty("timeout", DefaultValue = 50, IsRequired = false), 
        IntegerValidator(MinValue = 30)
    ]
    public int Timeout
    {
        get
        {
            return (int)base["timeout"];
        }
    }
}

Antes de seguirmos em frente, temos ainda que analisar algo importante no código acima. Repare que no atributo ConfigurationPropertyAttribute ainda temos mais algumas opções, tais como DefaultValue e IsRequired. Essa opções trabalham em conjunto, ou seja, se a propriedade IsRequired está definida como False, ou seja, o desenvolvedor não é obrigado definir este atributo no arquivo de configuração, podemos ter um valor padrão para este atributo através da propriedade DefaultValue, que é passada automaticamente para a aplicação.

Validação

Outro ponto bem interessante é a questão da validação dos atributos. Podemos validar os valores que o desenvolvedor colocar nos arquivos XML de configuração através de alguns atributos de validação, com finalidades de validações diferentes. Esses atributos herdam de uma classe base chamada ConfigurationValidatorAttribute. A validação é efetuada quando aplicamos estes atributos às propriedades da classe que representa a seção. No exemplo acima, utilizamos o atributo IntegerValidator, onde podemos definir um valor mínimo e máximo.

Como dissemos acima, os atributos de validação são vários e podem ser acessados através deste endereço. Depois de entender como criamos a classe, chega a hora de analisar como fica a configuração no arquivo *.config, já fazendo o uso desta nova seção. A solução aqui é registrar a nova seção dentro de configSettings para que a mesma possa funcionar. Para registrá-la é extremamente simples, onde devemos informar o nome e o tipo:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="ServiceConfig" type="ConfigTest.ServiceConfig, ConfigTest" />
  </configSections>

  <ServiceConfig path="C:Temp" timeout="34" />
</configuration>

Depois da nova seção registrada, criamos e atribuimos os devidos valores da mesma. Vale lembrar que a validação efetuada pela atributo IntegerValidator será somente feita em runtime e, uma Exception será atirada na sua aplicação caso os valores não atendam os critérios. E para finalizar, abaixo é mostrado como recuperamos os valores do arquivo de configuração, fazendo o uso da classe que criamos anteriormente:

static void Main(string[] args)
{
    ServiceConfig srv =
        System.Configuration.ConfigurationManager.GetSection("ServiceConfig") as ServiceConfig;

    if (srv != null)
    {
        Console.WriteLine(srv.Path);
        Console.WriteLine(srv.Timeout.ToString());
    }
}
Publicidade

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s