2011-01-12 16 views
51

Chcę użyć konfiguracji mojej aplikacji do przechowywania ustawień dla 2 firm, a ja wolałbym, aby można było użyć sekcji do oddzielenia danych dla jednej od drugiej zamiast podawania im różnych nazw kluczy.Jak korzystać z sekcji w aplikacji app.config w języku C# 4.0?

Sprawdzałem w Internecie, ale wydaje mi się, że jestem trochę przytłoczony, gdy ludzie używają sekcji lub znajdują nieaktualne łatwe sposoby ich używania. Czy ktokolwiek mógłby przekazać mi przewodnik dla początkujących?

Poniżej jest przykład tego, co mój app.config wyglądałby następująco:

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

Aktualizacja:

zaawansowane rozwiązanie oparte na anwer. na wypadek, gdyby ktoś chciał wiedzieć.

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> 

Kod:

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

Jak będziesz wiedzieć, które dane spółki w użyciu? W ten sposób wiesz, kiedy jesteś użytkownikiem FBI? – DOK

+0

po ustawieniu katalogu wejściowego, będzie metoda do robienia rzeczy dla tej firmy. – Andy

Odpowiedz

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> 

A potem:

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

to jest świetne. czy znasz sposób na odzyskanie wszystkich różnych sekcji z konfiguracji aplikacji z kodu? – Andy

+10

Uwaga: Jeśli używasz sekcjiGroups, grupa zostanie dodana do sekcji get jako ścieżka, tj. ConfigurationManager.GetSection ("GroupName/FSCS") jako NameValueCollection; – Andy

+0

w wersji .net wyższej niż 2.0 musisz użyć '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> 

Przykład użycia

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

Proszę podać dodatkowe wyjaśnienie do kodu. –

+0

+1, ponieważ nie używa się tylko definicji "var". Pomaga zrozumieć, jak to działa i jakiego rodzaju typy używasz. – EAmez