.NET Tip: Create a Custom Configuration Section in .NET 2.0

The configuration file concept in .NET makes it much easier to change runtime settings without having to recompile. These files hearken back to the days of .INI files in previous versions of Windows, long before the dreaded Registry. Although you can keep all your settings in the appSettings section, you also can add your own custom configuration sections to make your settings a bit more orderly and easy to find within a configuration file. This tip shows you how to build a custom configuration section to hold settings dealing with sending e-mail.

The Configuration Class

The first thing you need is a configuration class that derives from the System.Configuration.ConfigurationSection class. This class will have a property for each configuration property you want to set. Here's the class I created:

public class MailManagerConfiguration : ConfigurationSection
{
   public MailManagerConfiguration()
   {
   }

   [ConfigurationProperty("serverAddress",
                          DefaultValue = "mail.northcomp.com",
                          IsRequired = true)]
   public String MailServer
   {
      get
      { return (String)this["serverAddress"]; }
      set
      { this["serverAddress"] = value; }
   }

   [ConfigurationProperty("messageTemplate", IsRequired = true)]
   public String MessageTemplate
   {
      get
      { return (String)this["messageTemplate"]; }
      set
      { this["messageTemplate"] = value; }
   }

   [ConfigurationProperty("baseURL", IsRequired = true)]
   public String BaseURL
   {
      get
      { return (String)this["baseURL"]; }
      set
      { this["baseURL"] = value; }
   }

   [ConfigurationProperty("from",
   DefaultValue = "Eric Smith <eric@northcomp.com>",
      IsRequired = true)]
   public String ReturnAddress
   {
      get
      { return (String)this["from"]; }
      set
      { this["from"] = value; }
   }

   [ConfigurationProperty("title", DefaultValue =
                          "Announcement from Eric :: {0}",
                          IsRequired = true)]
   public String TitleFormat
   {
      get
      { return (String)this["title"]; }
      set
      { this["title"] = value; }
   }
}

This class has the following five properties:

  • One for the address of the mail server
  • One for the template for the message
  • A base URL for all the links and images
  • A return address
  • A title format for the message subject

From this example, you can see how these properties can be required or optional and can have a default value in case one is not specified in the configuration file.

The configuration file needs the following code to use this configuration section:

<configuration>
   <configSections>
      <section name="MailManagerConfiguration"
               type="MyLibrary.MailManagerConfiguration,
                     MyLibrary" />
   </configSections>
   <MailManagerConfiguration
      serverAddress="mail.myserver.com"
      messageTemplate="C:\Web\mailmanager\template.html"
      baseURL="http://www.northcomp.com"
      from="Northstar Computer Systems
         &lt;clientcenter@northcomp.com&gt;"
      title="My Web Site:: {0}" />

The type parameter in the section tag first references the full name of the class (including any namespace), followed by the class name by itself. I generally keep these classes in a separate library for just this reason.

Each of the parameters in the configuration class has a corresponding value in the MailManagerConfiguration tag, as you can see above. The purpose of each value is specific to what the class needs, but you can see how to lay things out in the configuration file.

Instantiate the Configuration Class

The last step is instantiating the configuration class and using the properties, as shown here:

MailManagerConfiguration config =
   (MailManagerConfiguration)ConfigurationManager.GetSection
   ("MailManagerConfiguration");

Once you have this class instantiated, you can read any of the properties, such as config.ReturnAddress, config.TitleFormat, and so on.

By creating this custom configuration section, you've made your class more modular and not reliant on the generic appSettings section in the configuration file. Users who work with the class will know what the settings are for and be able to access them more easily in their code.

About the Author

Eric Smith is the owner of Northstar Computer Systems, a Web-hosting company based in Indianapolis, Indiana. He is also a MCT and MCSD who has been developing with .NET since 2001. In addition, he has written or contributed to 12 books covering .NET, ASP, and Visual Basic.



Comments

  • Using Collections inside the section

    Posted by Magallo on 04/11/2007 11:18am

    I saw in your example that your MailManagerConfiguration class contains only String properties. Is there the possibility to use a Collection or a List or an array of "something" as a property of my ConfigurationSection derived class? I mean, in my section data I have a list of "somedata" and I would like to have a property inside my class that is a sort of List or something like that. Can you make an exapmple? Thanks.

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • When individual departments procure cloud service for their own use, they usually don't consider the hazardous organization-wide implications. Read this paper to learn best practices for setting up an internal, IT-based cloud brokerage function that service the entire organization. Find out how this approach enables you to retain top-down visibility and control of network security and manage the impact of cloud traffic on your WAN.

  • U.S. companies are desperately trying to recruit and hire skilled software engineers and developers, but there is simply not enough quality talent to go around. Tiempo Development is a nearshore software development company. Our headquarters are in AZ, but we are a pioneer and leader in outsourcing to Mexico, based on our three software development centers there. We have a proven process and we are experts at providing our customers with powerful solutions. We transform ideas into reality.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date