Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nested Configuration Section app.config

Tags:

I don't find any examples of how to access such a nested configuration section in a app.config

  <my.configuration>     <emailNotification>       <to value="[email protected]" />       <from value="[email protected]" />       <subject value="Subject" />       <smtpHost value="smtp.you.com" />       <triggers>         <add name="1" varAlias="Var1" lower="-200" upper="-150"/>       </triggers>       </emailNotification>   </my.configuration> 

I used ConfigurationElementCollection and ConfigurationElement before. But I don't know how to do the above?

like image 279
chriszero Avatar asked Feb 17 '11 09:02

chriszero


People also ask

What is Appsetting section in web config?

The <appSettings> element stores custom application configuration information, such as database connection strings, file paths, XML Web service URLs, or any other custom configuration information for an application.

Where should app config be located?

The application configuration file usually lives in the same directory as your application. For web applications, it is named Web. config. For non-web applications, it starts life with the name of App.

Does app config get compiled?

Now you might be wondering what happens behind the scenes. Well, when you compile your application, the compiler actually copies the app. config file to the output folder, but gives it another name: When you start your application (ConsoleApp1.exe in our example), the matching config file will be loaded too.


1 Answers

You need to:

Define my.configuration as section group and emailNotification as a section within the group. Add following to the configuration file:

<configSections>     <sectionGroup name="my.configuration"                   type="SectionGroupRetrieval.MyConfigurationGroup, SectionGroupRetrieval">         <section name="emailNotification"                  type="SectionGroupRetrieval.EmailNotificationSection, SectionGroupRetrieval" />     </sectionGroup>        </configSections> 

Implement the configuration section group (my.configuration).

public class MyConfigurationGroup : ConfigurationSectionGroup {     [ConfigurationProperty( "emailNotification" )]     public EmailNotificationSection EmailNotification     {         get { return (EmailNotificationSection)base.Sections[ "emailNotification" ]; }     } } 

Implement the configuration section (emailNotification).

public class EmailNotificationSection : ConfigurationSection {     [ConfigurationProperty( "to" )]     public ValueElement To     {         get { return (ValueElement)base[ "to" ]; }     }      [ConfigurationProperty( "from" )]     public ValueElement From     {         get { return (ValueElement)base[ "from" ]; }     }      [ConfigurationProperty( "subject" )]     public ValueElement Subject     {         get { return (ValueElement)base[ "subject" ]; }     }      [ConfigurationProperty( "smtpHost" )]     public ValueElement SmtpHost     {         get { return (ValueElement)base[ "smtpHost" ]; }     }      [ConfigurationProperty( "triggers" )]     public TriggerElementCollection Triggers     {         get { return (TriggerElementCollection)base[ "triggers" ]; }     } } 

Implement necessary configuration elements and configuration element collection.

public class ValueElement : ConfigurationElement {     [ConfigurationProperty( "value" )]     public string Value     {         get { return (string)base[ "value" ]; }         set { base[ "value" ] = value; }     } }  public class TriggerElement : ConfigurationElement {     [ConfigurationProperty( "name" )]     public string Name     {         get { return (string)base[ "name" ]; }         set { base[ "name" ] = value; }     }      [ConfigurationProperty( "varAlias" )]     public string VarAlias     {         get { return (string)base[ "varAlias" ]; }         set { base[ "varAlias" ] = value; }     }      [ConfigurationProperty( "lower" )]     public int Lower     {         get { return (int)base[ "lower" ]; }         set { base[ "lower" ] = value; }     }      [ConfigurationProperty( "upper" )]     public int Upper     {         get { return (int)base[ "upper" ]; }         set { base[ "upper" ] = value; }     } }  [ConfigurationCollection( typeof( TriggerElement ) )] public class TriggerElementCollection : ConfigurationElementCollection {     public TriggerElement this[ string name ]     {         get { return (TriggerElement)base.BaseGet( name ); }     }      public TriggerElement this[ int index ]     {         get { return (TriggerElement)base.BaseGet( index ); }     }      protected override ConfigurationElement CreateNewElement()     {         return new TriggerElement();     }      protected override object GetElementKey( ConfigurationElement element )     {         return ( (TriggerElement)element ).Name;     } } 

After updating the configuration file and implementing necessary configuration bits, you can access you section as follows:

Configuration config = ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.None ); MyConfigurationGroup myConfiguration = (MyConfigurationGroup)config.GetSectionGroup( "my.configuration" ); EmailNotificationSection section = myConfiguration.EmailNotification; 
like image 174
Rest Wing Avatar answered Sep 17 '22 14:09

Rest Wing