Share via


Introdução a propriedades dinâmicas (Visual Studio)

Observação:

O interface do usuário para propriedades dinâmicas foi removida sistema autônomo de Visual Studio 2005.Porém propriedades dinâmicas ainda recebem suporte.Se você importar um projeto de uma versão anterior do Visual Studio, as configurações de propriedades dinâmicas serão preservadas no código e irão funcionar em tempo de execução.É recomendável que você em vez disso use o Project Designer para especificar configurações de aplicativo.Para obter mais informações, consulte Página de configurações, Designer de projeto. e Gerenciando definições de aplicativo.

Propriedades dinâmicas permitem que você configure seu aplicativo de maneira que alguns ou todos os seus valores de propriedades sejam armazenados em um arquivo de configuração externo em vez de ser armazenados no código compilado do aplicativo.Ao fornecer aos administradores os meios para atualizar valores de propriedades que podem precisar ser alterados ao longo do tempo, isto pode reduzir o custo total de se manter um aplicativo após ele ter sido implantado.Por exemplo, suponha que você esteja criando um aplicativo que usa um banco de dados de teste durante o processo de desenvolvimento, e você precise alterná-lo para um banco de dados de produção ao implantá-lo.Se você armazenar os valores de propriedades dentro do aplicativo, você tem que alterar todas as configurações de banco de dados manualmente antes de implantar, e depois recompilar o código fonte.Se você armazenar esses valores externamente, você pode fazer uma única alteração no arquivo externo e o aplicativo irá pegar os novos valores na próxima vez em que ele for executado.

Observação de segurança:

Valores de propriedades armazenados em um arquivo de configuração não são seguros.Dados confidenciais sistema autônomo senhas e informações de cartão de crédito não devem ser o armazenamento d sistema autônomo propriedades dinâmicas.

Você pode usar propriedades dinâmicas em qualquer aplicativo que seja compilado em um arquivo .exe.Projetos que compilam uma DLL não podem usar propriedades dinâmicas diretamente; entretanto propriedades de DLL podem ser definidas dinamicamente pelo .exe que está referenciando o arquivo .dll.Embora as propriedades de qualquer componente, formulário ou controle nestes aplicativos possam ser tratadas dinamicamente, algumas propriedades são melhores candidatas a propriedade dinâmica que outras.Frequêntemente, você irá armazenar e recuperar propriedades que se conectam a recursos externos que podem se alterar, incluindo bancos de dados, logs de eventos, ou contadores de desempenho.Muitas dessas propriedades são identificadas como candidatas padrão a propriedade dinâmica.

Observação:

O código de exemplo neste tópico depende da existência de um SqlConnection objeto e um arquivo de configuração; ele causará erros de compilação sem eles.

Propriedades dinâmicas e arquivos de configuração

Ao definir uma propriedade como configurável, o seu valor é gravado em um arquivo de configuração e código é inserido na classe para indicar que o valor da propriedade deve ser recuperado a partir deste recurso externo.O arquivo de configuração varia de acordo com o tipo de aplicativo; aplicativos baseados na Web usam o arquivo Web.config, e aplicativos baseados no Windows usam um arquivo semelhante com extensão .config.Todos os formulários e componentes em um aplicativo usam um único arquivo de configuração.Você não pode alternar para um arquivo de configuração diferente ou usar vários arquivos dentro de um único aplicativo.

Dentro do arquivo de configuração, as propriedades são mantidas usando XML.Por exemplo, suponha que você indicou que a propriedade ConnectionString para uma conexão de dados deve ser armazenada no arquivo de configuração.Você poderá ver este código no editor de código, indicando que o valor é armazenado externamente:

Me.SqlConnection1.ConnectionString = _
  System.Configuration.ConfigurationManager. _
  AppSettings.Get("SqlConnection1.ConnectionString")
     this.sqlConnection1.ConnectionString = 
          System.Configuration.ConfigurationManager.
          AppSettings.Get("SqlConnection1.ConnectionString");
Observação de segurança:

Para obter mais informações sobre como criar proteger conexões de dados, consulte Proteger seqüências de caracteres de conexão.

No arquivo de configuração, o valor dessa propriedade seria armazenado via XML, usando a chave indicada no código do formulário:

<configuration>

<appSettings>

<add key="sqlConnection1.ConnectionString" value="data source=myserver;initial catalog=Apps;Integrated Security=SSPI;packet size=4096" />

</appSettings>

</configuration>

Para cada valor no arquivo de configuração é atribuída uma chave que é usada para armazenar e recuperar o valor.A parte inicial da chave indica o componente do qual originou-se o valor.Por exemplo, essas duas chaves indicam uma propriedade ConnectionString de duas conexões de dados dentro de um único aplicativo:

<configuration>

<appSettings>

<add key="sqlConnection1.ConnectionString" value="data source=myserver;initial catalog=Apps;Integrated Security=SSPI;packet size=4096" />

<add key="sqlConnection2.ConnectionString" value="data source=myserver;initial catalog=Apps;Integrated Security=SSPI;packet size=4096" />

</appSettings>

</configuration>

Você pode modificar o arquivo de configuração diretamente de maneira a atualizar dinamicamente os valores de propriedades em seu aplicativo.Na próxima vez em que o aplicativo for iniciado, ele irá atualizar os valores.

De uma certa maneira, arquivos de configuração são semelhantes a arquivos de recurso; ambos são usados para armazenar valores fora do aplicativo compilado e ambos usam XML para armazenar suas informações.No entanto, arquivos de recurso servem para uma finalidade totalmente diferente do que arquivos de configuração.Arquivos de recurso são usados para armazenar sequências e outros recursos localizáveis para fins de tradução, enquanto arquivos de configuração (no caso de propriedades dinâmicas) são usados para atualizar valores de propriedades.Os valores em um arquivo de recurso são destinados a serem traduzidos, mas tipicamente não são alterados, enquanto valores de propriedades dinâmicas em um arquivo de configuração podem ser alterados conforme necessário.Além disso, você pode associar vários arquivos de recurso a um projeto, mas você só pode ter um único arquivo de configuração para o aplicativo.Para obter mais informações sobre recursos, consulte Organização hierárquica para localização de recursos.

Definindo propriedades múltiplas para a mesma chave

Propriedades múltiplas podem referenciar o mesmo par chave-valor em um arquivo de configuração.Por exemplo, se você tiver três componentes em sua classe que acessem o mesmo banco de dados, você pode armazenar a propriedade ConnectionString para cada um no mesmo par chave-valor.Isso significa que se o banco de dados for alterado, você pode atualizar um único valor no arquivo de configuração para aplicar a alteração a todos os três componentes.Você faria isso definindo cada uma das propriedades como a mesma chave, assim:

Me.SqlConnection1.ConnectionString = _
  System.Configuration.ConfigurationManager. _
  AppSettings.Get("SqlConnection1.ConnectionString")

Me.SqlConnection2.ConnectionString = _
  System.Configuration.ConfigurationManager. _
  AppSettings.Get("SqlConnection1.ConnectionString")

Me.SqlConnection3.ConnectionString = _
  System.Configuration.ConfigurationManager. _
  AppSettings.Get("SqlConnection1.ConnectionString")
     this.sqlConnection1.ConnectionString = 
          System.Configuration.ConfigurationManager.
          AppSettings.Get("SqlConnection1.ConnectionString");

        this.sqlConnection2.ConnectionString = 
          System.Configuration.ConfigurationManager.
          AppSettings.Get("SqlConnection1.ConnectionString"); 

        this.sqlConnection3.ConnectionString = 
          System.Configuration.ConfigurationManager.
          AppSettings.Get("SqlConnection1.ConnectionString"); 

Observe que, enquanto os componentes em uso diferem, todos eles referem-se à chave para sqlConnection1.ConnectionString.

Quando você escolhe a mesma chave para propriedades múltiplas, somente uma entrada é feita no arquivo de configuração.O valor inicial armazenado é o mesmo da primeira propriedade para a qual foi fornecida essa chave.

Tipos de dados e propriedades dinâmicas

XML armazena tudo como uma sequência de caracteres.Se o valor da propriedade que você está armazenando não é uma sequência de caracteres, você irá ver informações adicionais no editor de código para indicar o tipo de dado para o valor da propriedade.Por exemplo, suponha que você esteja armazenando dinamicamente o valor das propriedades Interval e Enabled de um componente Timer.No arquivo de configuração, essa propriedade seria armazenada assim:

<appSettings>

<add key=timer1.Interval" value="100" />

<add key=timer1.Enabled" value="True" />

</appSettings>

No Editor de códigos, você vê esse código para indicar que o valor recuperado precisa ser alterado para um Tipo de dados duplo (Visual Basic):

Me.Timer1.Enabled = (New System.Configuration. _
AppSettingsReader()).GetValue("timer1.Enabled", GetType(Boolean))

Me.Timer1.Interval = (New System.Configuration. _
AppSettingsReader()).GetValue("Timer1.Interval", GetType(Double))
     this.timer1.Enabled = (bool)(new System.Configuration.
          AppSettingsReader().GetValue("timer1.Enabled", typeof(bool)));

        this.timer1.Interval = (System.Double)(new System.Configuration.
          AppSettingsReader().GetValue("timer1.Interval", typeof(System.Double)));
Observação:

Existem dois timers, um para o Windows Forms e uma para aplicativos baseados em servidor, com pequenas diferenças nos modelos de programação.Este exemplo usa o timer baseado em servidor.Para obter mais informações sobre os dois timers disponível, consulte Introdução a timers com base no servidor.

Preocupações de desempenho e segurança com propriedades dinâmicas

Há dois itens que podem ser preocupantes quando você usa propriedades dinâmicas.Primeiro, armazenamento e recuperação de propriedades dinâmicas podem afetar um pouco o desempenho do aplicativo.Recuperar valores de propriedades de dentro do aplicativo compilado é ligeiramente mais rápido do que recuperar valores de propriedades do arquivo de configuração.Na primeira vez em que um valor de arquivo de configuração é acessado pelo aplicativo, haverá um leve impacto no desempenho quando o aplicativo ler o arquivo.Porém este impacto é muito pequeno e não deve ser notado.Qualquer recuperação subsequente desta ou outra propriedade tem um impacto no desempenho muito menor — semelhante a ler um valor de uma tabela de hash.

Segundo, se você estiver armazenando valores de propriedades tais como identificações dos usuários e senhas em um arquivo externo, você desejará controlar quem tem acesso ao arquivo e aos valores que ele contém.Uma maneira de se fazer isso é proteger o arquivo com uma lista de controle de acesso (ACL) do Windows.Uma lista de controle de acesso especifica que operações diferentes usuários podem executar em arquivos e diretórios específicos.Além disso, se você estiver trabalhando com um aplicativo baseado na Web, você pode tirar proveito da opção de segurança integrada fornecida pelo Windows, Serviços de Informações da Internet (IIS), e SQL Server.Neste modelo, credenciais de autenticação de um usuário para a rede local também são usadas para acessar recursos de banco de dados, e nenhum nome de usuário ou senha explícitos são usados na sequência de conexão.

Para obter mais informações sobre segurança, consulte a documentação do Windows ou as seguintes páginas:

Consulte também

Outros recursos

Configurando aplicativos usando propriedades dinâmicas