12

I want to have the following structure in my config:

<MySection>  
  <add key="1" value="one" />  
  <add key="2" value="two" />
  <add key="3" value="three" />
</MySection>

I have a limitation such that MySection can't use the AppSettingsSection as it has to inherit from a different parent custom section. And I need to resolve this section to a NameValueCollection such that when I call something like:

ConfigurationManager.GetConfig("MySection")

it should return a NameValueCollection. How to go about doing this? I found some information on NameValueConfigurationCollection but that's not what I'm looking for.

Sidharth Panwar
  • 4,606
  • 6
  • 27
  • 36
  • Possible duplication of http://stackoverflow.com/questions/2714560/reading-configurationsection-value-using-custom-configuration-and-represent-into – tom redfern Sep 19 '11 at 12:57
  • Key difference is that I want to return a NameValueCollection and not a custom configurationsection/elementcollection. – Sidharth Panwar Sep 19 '11 at 13:30

2 Answers2

8

This worked --
Code:

class Program
{
    static void Main(string[] args)
    {
        NameValueCollection nvc = ConfigurationManager.GetSection("MyAppSettings") as NameValueCollection;
        for(int i=0; i<nvc.Count; i++)
        {
            Console.WriteLine(nvc.AllKeys[i] + " " + nvc[i]);
        } 
        Console.ReadLine();
    }
}

class ParentSection : ConfigurationSection
{ 
    //This may have some custom implementation
}

class MyAppSettingsSection : ParentSection
{
    public static MyAppSettingsSection GetConfig()
    {
        return (MyAppSettingsSection)ConfigurationManager.GetSection("MyAppSettings");
    }


    [ConfigurationProperty("", IsDefaultCollection = true)]
    public NameValueConfigurationCollection Settings
    {
        get
        {
            return (NameValueConfigurationCollection)base[""];
        }
    }
}

Configuration:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <!-- <section name="MyAppSettings" type="CustomAppSettings.MyAppSettingsSection, CustomAppSettings"/> -->
    <section name="MyAppSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

  </configSections>

  <MyAppSettings>
    <add key="1" value="one"/>
    <add key="2" value="two"/>
    <add key="3" value="three"/>
    <add key="4" value="four"/>
  </MyAppSettings>
</configuration>

My major concern was that my section needed to inherit from a custom section and I wanted to return a NameValueCollection when the ConfigurationManager.GetSection("MyAppSettings") is called.
I changed the type property to AppSettingsSection, even though it's nowhere in the picture and it worked. Now I need to figure out how that worked but for now the good thing is that I have a working sample :)

Update: Unfortunately, this wasn't the expected way of achieving what was intended because now the custom section is not coming into the picture at all so unfortunately this isn't the best way to do it.

Of course, if you just wanted to rename your appsettings section this would work like a charm.

Sidharth Panwar
  • 4,606
  • 6
  • 27
  • 36
2

you should create a class which derives from ConfigurationSection

see a full example here: How to: Create Custom Configuration Sections Using ConfigurationSection

Davide Piras
  • 43,984
  • 10
  • 98
  • 147
  • I'm doing that but I'm not able to return a NameValueCollection. – Sidharth Panwar Sep 19 '11 at 13:23
  • Wouldn't matter. I was able to return a namevalueconfigurationcollection but not namevaluecollection. Here's the snippet for the former: http://geekswithblogs.net/sdorman/archive/2008/03/16/namevaluecollection-and-.net-configuration-files.aspx – Sidharth Panwar Sep 19 '11 at 13:31
  • The configuration tool worked great in vs2015! It generated a more complicated section. – Ioana Marcu Jan 20 '17 at 11:57