Domanda

Sto scrivendo una pagina che può utilizzare un paio di temi diversi e ho intenzione di memorizzare alcune informazioni su ciascun tema nel web.config.

È più efficiente creare una nuova sezione Group e archiviare tutto insieme o semplicemente mettere tutto in AppSettings?

soluzione 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>

Per accedere ai valori in configSection, sto usando questo codice:

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

soluzione di impostazione app

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

Per accedere ai valori in AppSettings, sto usando questo codice

    String SchedulerTheme = ConfigurationManager.AppSettings["UBSchedulerForm"].ToString();
È stato utile?

Soluzione

Per una configurazione di configurazione più complessa, utilizzerei una sezione di configurazione personalizzata che definisce chiaramente i ruoli di ciascuna sezione, ad esempio

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

Nella tua classe di configurazione puoi esporre le tue proprietà con qualcosa come

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
  }
}

È quindi possibile accedere alle proprietà di configurazione nel modo seguente dal proprio codice

string smtp = MonitoringConfig.GetConfig().Smtp;

Altri suggerimenti

Non ci saranno differenze misurabili in termini di efficienza.

AppSettings è eccezionale se tutto ciò di cui hai bisogno sono coppie nome / valore.

Per qualcosa di più complesso, vale la pena creare una sezione di configurazione personalizzata.

Nell'esempio che citi, utilizzerei appSettings.

Non ci saranno differenze nelle prestazioni, poiché ConfigurationManager.AppSettings chiama comunque GetSection (" appSettings "). Se hai bisogno di enumerare tutte le chiavi, una sezione personalizzata sarà migliore rispetto all'enumerazione di tutte le impostazioni delle app e alla ricerca di un prefisso sulle chiavi, ma per il resto è più facile attenersi alle impostazioni delle app a meno che tu non abbia bisogno di qualcosa di più complesso di un NameValueCollection.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top