Prós e contras de AppSettings vs applicationSettings (app.net.config / Web.configuracao)
ao desenvolver uma aplicação. Net Windows Forms, temos a escolha entre as marcas App.config
para guardar os nossos valores de configuração. Qual é melhor?
<configuration>
<!-- Choice 1 -->
<appSettings>
<add key="RequestTimeoutInMilliseconds" value="10000"/>
</appSettings>
<!-- Choice 2 -->
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" >
<section name="Project1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<Project1.Properties.Settings>
<setting name="TABLEA" serializeAs="String">
<value>TABLEA</value>
</setting>
</Project1.Properties.Settings>
</applicationSettings>
</configuration>
5 answers
O básico {[[0]} é mais fácil de lidar - basta colocar uma entrada <add key="...." value="..." />
e está feito.
A desvantagem é: não há nenhuma verificação de tipo, por exemplo, você não pode assumir com segurança o seu número que você queria configurar lá realmente é um número-alguém poderia colocar um texto nessa configuração..... basta acedê-lo como ConfigurationManager["(key)"]
e depois cabe-lhe saber com o que está a lidar.
Também, com o tempo, o {[[0]} pode ficar bastante complicado e confuso, se muitas partes do seu app começar colocar coisas lá (lembre-se das janelas antigas.ficheiro ini? :-)).
Se você puder, eu preferiria e recomendaria usar suas próprias seções de configuração-com. NET 2.0, ele realmente se tornou muito fácil, dessa forma, você pode:
- a) Defina as suas definições de configuração em código e tenha-as seguras do tipo e verificado
- B) pode separar completamente as suas configurações de todas as pessoas e podes reutilizar o teu código de configuração também!
A configuração da aplicação pode ser controlada a partir de um desenhador (normalmente existe uma configuração.configuração arquivo por padrão) para que seja mais fácil de modificar e você pode acessá-los programaticamente através da classe de configuração, onde eles aparecem como uma propriedade fortemente digitada. Você também pode ter aplicativos e configurações de nível de usuário, bem como configurações padrão para voltar.
Isto está disponível a partir do. NET 2.0 em diante e desacredita a outra maneira de o fazer (tanto quanto posso dizer).
Mais os pormenores são apresentados em: msdn.microsoft.com/en-us/library/k4s6c3a0.aspx
Tenho usado um padrão que encontrei há algum tempo atrás, onde você usa as marcas xml básicas, mas embrulha a configuração numa classe de configuração estática. Uma aplicação DIY.Definicao.
Padrão De Configuração Estática DotNetPearls
Se o fizeres desta maneira podes:
- usar diferentes conjuntos de valores de configuração para diferentes ambientes (dev, test, prod)
- prever predefinições sensatas para cada configuração
- controlar a forma como os valores são definidos e instanciado
Configuração:
<add key="machineName" value="Prod" />
<add key="anotherMachineName" value="Test" />
<add key="EnvTypeDefault" value="Dev" />
<add key="RootURLProd" value="http://domain.com/app/" />
<add key="RootURLTest" value="http://test.domain.com/app/" />
<add key="RootURLDev" value="http://localhost/app/" />
<add key="HumanReadableEnvTypeProd" value="" />
<add key="HumanReadableEnvTypeTest" value="Test Mode" />
<add key="HumanReadableEnvTypeDev" value="Development Mode" />
Classe de configuração:
using System;
using System.Collections.Generic;
using System.Web;
using WebConfig = System.Web.Configuration.WebConfigurationManager;
public static class Config
{
#region Properties
public static string EnvironmentType { get; private set; }
public static Uri RootURL { get; private set; }
public static string HumanReadableEnvType { get; private set; }
#endregion
#region CTOR
/// <summary>
/// Initializes all settings when the app spins up
/// </summary>
static Config()
{
// Init all settings here to prevent repeated NameValueCollection lookups
// Can increase performance on high volume apps
EnvironmentType =
WebConfig.AppSettings[System.Environment.MachineName] ??
"Dev";
RootURL =
new Uri(WebConfig.AppSettings["RootURL" + EnvironmentType]);
HumanReadableEnvType =
WebConfig.AppSettings["HumanReadableEnvType" + Config.EnvironmentType] ??
string.Empty;
}
#endregion
}
<appSettings>
<add key="MyConfigKey" value="true"/>
</appSettings>
Escrevi uma classe de utilidade para aceder aos valores de uma forma segura que permite os valores predefinidos. Se os valores por omissão não forem fornecidos, então as mensagens de exceção úteis são dadas.
Você pode ver / baixar a classe aqui:
Para compreender osprós econs das configurações em {[[0]}, sugiro que examine os detalhes técnicos de ambos. Eu incluí links onde você pode encontrar o código fonte para manusear, descrevendo mais detalhes técnicos abaixo.
Deixe-me resumir brevemente o que reconheci quando trabalhei com eles (nota: {[6] } o mesmo se aplica ao arquivo web.config
de um site / web application):
ApplicationSettings
(clique acima para ver o código fonte e detalhes técnicos)
Prós
Eles permitem armazenar dados digitados, incluindo tipos de objetos (via
serializeAs
Propriedade)Eles têm um usuário e escopo de aplicação, permitindo armazenar os valores padrão
Eles são suportados na seção de configuração do Visual Studio
Cordas longas e/ou os dados com caracteres especiais são muito bem suportados (por exemplo, textos JSON incorporados contendo aspas duplas)
Cons
As configurações do usuário são armazenadas em um lugar diferente no perfil do usuário (com um caminho críptico), pode ser difícil de limpar
As configurações de escopo da aplicação são apenas de leitura durante a execução da aplicação (apenas as configurações de escopo do usuário podem ser alteradas durante a execução)
Ler / Escrever methods code built by Visual Studio's settings designer, not directly provided by third party tools (see link above for a workaround solution)
Applsettings
(clique acima para ver o código fonte e detalhes técnicos)
Prós
São "leves", ou seja, fáceis de manusear
Acesso de leitura e escrita durante a execução da aplicação
Eles podem ser editados facilmente pelos administradores no
Gestor de Serviços de Informação na Internet (IIS)
(funcionalidades ver - > configuração da aplicação, lembre-se que o nome do ícone é enganador, uma vez que só pode lidar com aplicações e não Aplicações.)
Cons
Suporta apenas os dados das cadeias de caracteres; o comprimento das cadeias de caracteres e os caracteres especiais são limitados
Eles não têm um escopo de usuário
Eles não apoiam valores por omissão
Não são suportados directamente na secção de configuração do Visual Studio