How do you use sections in c# 4.0 app.config?
Asked Answered
C

2

66

I want to use my app config to store the settings for 2 companys, and i'd prefer if it was possible to use a section to seperate the data for one from the other rather then giving them diffrent key names.

I have been checking online but i seem to get a bit overwhelmed when people use sections or find outdated easy ways to use them. could anyone pass me a beginner guide on them?

Below is an example of what my app.config would look like:

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

Update:

Advanced solution based on the anwer. in case anyone wanted to know.

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>

Code:

// 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";
        }
    }
}
Corinnacorinne answered 12/1, 2011 at 15:40 Comment(2)
How will you know which company's data to use? That is how do you know when you're a user at FBI?Bord
after setting the input directory, there will be a method to do things for that company.Corinnacorinne
C
90
<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>

And then:

var section = ConfigurationManager.GetSection("FSCS") as NameValueCollection;
var value = section["processingDirectory"];
Coastward answered 12/1, 2011 at 15:44 Comment(3)
this is great. would you happen to know a way to retrieve all diffrent sections from the app config from the code?Corinnacorinne
Note: If you're using sectionGroups, the group gets added to the get sections as a path ie ConfigurationManager.GetSection("GroupName/FSCS") as NameValueCollection;Corinnacorinne
in .net version higher than 2.0 you have to use type="System.Configuration.AppSettingsSection"Mongolia
G
18

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>

Example Usage

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"]
}
Generation answered 23/5, 2014 at 18:59 Comment(4)
Please provide some explanation in addition to the code.Tobolsk
+1 for not using only "var" definitions. It helps understanding how it works or what kind of types you are using.Catholicity
For future web searchers, I created a custom ConfigSectionGroup by subclassing -- this seems wrong, as this code attempted to load the class from the .NET Configuration namespace, which resulting in a TypeLoadException. After further inspection of the code, it seems unnecessary.Selfeducated
If you get a TypeInitializationException, ensure that the configSections element is the first child of the configuration element. There should also only be 1 of them.Parfleche

© 2022 - 2024 — McMap. All rights reserved.