2011-01-12 13 views
51

Desidero utilizzare la configurazione della mia app per archiviare le impostazioni per 2 aziende, e preferirei se fosse possibile utilizzare una sezione per separare i dati per uno dall'altro piuttosto che dare loro nomi di chiavi differenti.Come si usano le sezioni in app.config C# 4.0?

Ho controllato online, ma mi sembra di essere un po 'sopraffatto quando le persone usano le sezioni o trovano modi antiquati per usarli. qualcuno potrebbe passarmi una guida per principianti su di loro?

Di seguito è un esempio di ciò che il mio app.config sarà simile:

<configSections> 
    <section name="FBI" type="" /> 
    <section name="FSCS" type="" /> 
    </configSections> 

    <FSCS> 
    <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/> 
    </FSCS> 
    <FBI> 
    <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/> 
    </FBI> 

Aggiornamento:

soluzione avanzata basata sul Anwer. nel caso qualcuno volesse sapere.

App.config:

<configuration> 
    <configSections> 
     <sectionGroup name="FileCheckerConfigGroup"> 
      <section name="FBI" type="System.Configuration.NameValueSectionHandler" /> 
      <section name="FSCS" type="System.Configuration.NameValueSectionHandler" /> 
     </sectionGroup> 
    </configSections> 
    <FileCheckerConfigGroup> 
     <FSCS> 
      <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/> 
     </FSCS> 
     <FBI> 
      <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/> 
     </FBI> 
    </FileCheckerConfigGroup> 
</configuration> 

Codice:

// Get the application configuration file. 
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

// Get the collection of the section groups. 
ConfigurationSectionGroupCollection sectionGroups = config.SectionGroups; 

foreach (ConfigurationSectionGroup sectionGroup in sectionGroups) 
{ 
    if (sectionGroup.Name == "FileCheckerConfigGroup") 
    { 
     foreach (ConfigurationSection configurationSection in sectionGroup.Sections) 
     { 
      var section = ConfigurationManager.GetSection(configurationSection.SectionInformation.SectionName) as NameValueCollection; 
      inputDirectory = section["inputDirectory"]; //"C:\\testfiles"; 
     } 
    } 
} 
+0

Come farete a sapere quale azienda di dati da usare? È così che sai quando sei un utente dell'FBI? – DOK

+0

dopo aver impostato la directory di input, ci sarà un metodo per fare le cose per quella compagnia. – Andy

risposta

73
<configSections> 
    <section name="FBI" type="System.Configuration.NameValueSectionHandler" /> 
    <section name="FSCS" type="System.Configuration.NameValueSectionHandler" /> 
</configSections> 

<FSCS> 
    <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/> 
</FSCS> 
<FBI> 
    <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/> 
</FBI> 

E poi:

var section = ConfigurationManager.GetSection("FSCS") as NameValueCollection; 
var value = section["processingDirectory"]; 
+1

questo è fantastico. ti piacerebbe sapere un modo per recuperare tutte le sezioni diverse dalla configurazione dell'app dal codice? – Andy

+10

Nota: se si utilizzano i gruppi di sezioni, il gruppo viene aggiunto alle sezioni di acquisizione come percorso, ad esempio ConfigurationManager.GetSection ("GroupName/FSCS") come NameValueCollection; – Andy

+0

nella versione .net superiore a 2.0 è necessario utilizzare 'type =" System.Configuration.AppSettingsSection "' –

9

App.config

<configSections> 
    <sectionGroup name="FileCheckers"> 
    <section name="FBI" type="System.Configuration.NameValueSectionHandler" /> 
    <section name="FSCS" type="System.Configuration.NameValueSectionHandler" /> 
    </sectionGroup> 
</configSections> 

<FileCheckers> 
    <FSCS> 
    <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/> 
    </FSCS> 
    <FBI> 
    <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/> 
    </FBI> 
</FileCheckers> 

Esempio di utilizzo

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
ConfigurationSectionGroup fileCheckersGroup = config.SectionGroups["FileCheckers"]; 
foreach (ConfigurationSection section in fileCheckersGroup.Sections) 
{ 
    NameValueCollection sectionSettings = ConfigurationManager.GetSection(section.SectionInformation.SectionName) as NameValueCollection; 
    var value = sectionSettings["processingDirectory"] 
} 
+1

Fornire alcune spiegazioni in aggiunta al codice. –

+0

+1 per non utilizzare solo le definizioni "var". Aiuta a capire come funziona o che tipo di tipi stai usando. – EAmez

Problemi correlati