Pregunta

Estoy escribiendo una página que puede usar un par de temas diferentes, y voy a almacenar cierta información sobre cada tema en web.config.

¿Es más eficiente crear un nuevo grupo de secciones y almacenar todo junto, o simplemente poner todo en la configuración de la aplicación?

configSection solution

<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 acceder a los valores en la sección de configuración, estoy usando este código:

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

solución de configuración de aplicaciones

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

Para acceder a los valores en la configuración de la aplicación, estoy usando este código

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

Solución

Para una configuración de configuración más compleja, utilizaría una sección de configuración personalizada que defina claramente los roles de cada sección, por ejemplo

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

En su clase de configuración puede exponer sus propiedades con 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
  }
}

Luego puede acceder a las propiedades de configuración de la siguiente manera desde su código

string smtp = MonitoringConfig.GetConfig().Smtp;

Otros consejos

No habrá una diferencia medible en términos de eficiencia.

AppSettings es excelente si todo lo que necesitas son pares de nombre / valor.

Para algo más complejo, vale la pena crear una sección de configuración personalizada.

Para el ejemplo que mencionas, usaría appSettings.

No habrá diferencia en el rendimiento, ya que ConfigurationManager.AppSettings simplemente llama a GetSection (" appSettings ") de todos modos. Si necesita enumerar todas las claves, entonces una sección personalizada será más agradable que enumerar todas las configuraciones de aplicaciones y buscar algún prefijo en las claves, pero de lo contrario es más fácil atenerse a las configuraciones de aplicaciones a menos que necesite algo más complejo que un NameValueCollection.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top