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?
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.
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.
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.
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;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With