Pergunta

Eu estou escrevendo uma página que pode usar um par de temas diferentes, e eu estou indo para armazenar algumas informações sobre cada tema no web.config.

É mais eficiente para criar um novo sectionGroup e armazenar tudo em conjunto, ou apenas colocar tudo em appSettings?

solução configSection

<configSections>
    <sectionGroup name="SchedulerPage">
        <section name="Providers" type="System.Configuration.NameValueSectionHandler"/>
        <section name="Themes" type="System.Configuration.NameValueSectionHandler"/>
    </sectionGroup>
</configSections>
<SchedulerPage>
    <Themes>
        <add key="PI" value="PISchedulerForm"/>
        <add key="UB" value="UBSchedulerForm"/>
    </Themes>
</SchedulerPage>

Para valores de acesso na configSection, estou usando este código:

    NameValueCollection themes = ConfigurationManager.GetSection("SchedulerPage/Themes") as NameValueCollection;
    String SchedulerTheme = themes["UB"];

solução appSettings

<appSettings>
    <add key="PITheme" value="PISchedulerForm"/>
    <add key="UBTheme" value="UBSchedulerForm"/>
</appSettings>

Os valores acesso no appSettings, estou usando este código

    String SchedulerTheme = ConfigurationManager.AppSettings["UBSchedulerForm"].ToString();
Foi útil?

Solução

Para a configuração de configuração mais complexa, gostaria de usar uma seção de configuração personalizada que define claramente os papéis de cada seção, por exemplo

<appMonitoring enabled="true" smtpServer="xxx">
  <alertRecipients>
    <add name="me" email="me@me.com"/>
  </alertRecipient>
</appMonitoring>

Em sua classe de configuração que você pode expor suas propriedades com algo como

public class MonitoringConfig : ConfigurationSection
{
  [ConfigurationProperty("smtp", IsRequired = true)]
  public string Smtp
  {
    get { return this["smtp"] as string; }
  }
  public static MonitoringConfig GetConfig()
  {
    return ConfigurationManager.GetSection("appMonitoring") as MonitoringConfig
  }
}

Você pode, então, as propriedades de configuração de acesso da seguinte maneira a partir do seu código

string smtp = MonitoringConfig.GetConfig().Smtp;

Outras dicas

Não haverá nenhuma diferença mensurável em termos de eficiência.

AppSettings é ótimo se tudo que você precisa são pares nome / valor.

Para qualquer coisa mais complexa, vale a pena criar uma seção de configuração personalizada.

Para o exemplo que você menciona, eu usaria appSettings.

Não haverá diferença no desempenho, já que ConfigurationManager.AppSettings apenas chama GetSection ( "appSettings") de qualquer maneira. Se você vai precisar para enumerar todas as chaves, em seguida, uma seção personalizada será mais agradável do que enumerar todas appSettings e procurando algum prefixo nas teclas, mas por outro lado é mais fácil para furar a appSettings a menos que você precisa de algo mais complexo do que um NameValueCollection.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top