bornfromanegg
bornfromanegg

Reputation: 2928

How to read configSections

I've set up some custom config sections in my App.Config, such that I now have a configSection that looks like this.

<configSections>
    <section name="Section1" type="ConfigSections.MySection, MyNamespace"/>    
    <section name="Section2" type="ConfigSections.MySection, MyNamespace"/>    
    <section name="Section3" type="ConfigSections.MySection, MyNamespace"/>    
</configSections>

What I want to do is to read this section in code in order to find out at runtime what sections I have. I have tried:

var mySections = ConfigurationManager.GetSection("configSections");

but this returns null. I'm sure I'm missing something simple, but I cannot find anything about how to do this.

Thanks

Upvotes: 4

Views: 10542

Answers (2)

Christian.K
Christian.K

Reputation: 49290

Use the Configuration.Sections-property to get the names of the declared configuration sections. Then, optionally if you need, use ConfigurationManager.GetSection() to retrieve an individual section.

Note that you may want to use the value of the SectionInformation.IsDeclared or ConfigSource of the respective ConfigurationSection.SectionInformation to find out of the section was actually declared in your configuration file, or is inherited from machine.config or otherwise.

Example:

    var cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    var localSections = cfg.Sections.Cast<ConfigurationSection>()
       .Where(s => s.SectionInformation.IsDeclared);

Finally, note that this approach will only get you configuration sections. It will not return configuration sections, which are itself inside a <sectionGroup>. For them, you would first need iterate over Configuration.SectionGroups, which has it's own Sections-property that contains the per section group sections. It can also contain nested section groups, again accessible via the SectionGroups property of each ConfigurationSectionGroup instance.

Upvotes: 6

HW90
HW90

Reputation: 1983

if put all the sections into a section group this would work:

<configSections>
      <sectionGroup name="FMGlobal.Common.SecuritySubsystem.ADAzManFeed">
        <section name="ADFolders" type="System.Configuration.NameValueSectionHandler, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </sectionGroup>
    </configSections>

  var  NVC = (ConfigurationManager.GetSection( _
    "FMGlobal.Common.SecuritySubsystem.ADAzManFeed")

Upvotes: 0

Related Questions