Are you tired of seeing your configuration settings as an endless list of key value pairs?
<add key="key0" value="value0" /> <add key="key1" value="value1" /> <add key="key2" value="value2" /> ...
Would you rather see something more like this?
<MySetting fileName="c:\temp" password="pencil" someOtherSetting="value" />
Join the club. Not only is the first approach prone to typos (
AppSettings["tire"]
or AppSettings["tier]
anyone?), too many of these things all bunched together can cause your eyes to glaze over. It is a lot easier to manage when settings are grouped in logical bunches.
A while back Craig Andera solved this problem with the Last Configuration Section Handler he’d ever need. This basically made it easy to specify a custom strongly typed class to represent a logical group of settings using Xml Serialization. It led to a much cleaner configuration file.
But that was then and this is now. With ASP.NET 2.0, there’s an even easier waywhich I didn’t know about until Jeff Atwood recently turned me on to it.
So here is a quick run through in three easy steps.
Step one - Define your Custom Configuration Class
In this case, we’ll define a class to hold settings for a blog engine. We just need to define our class, inherit from System.Configuration.ConfigurationSection, and add a property per setting we wish to store.
using System; using System.Configuration; public class BlogSettings : ConfigurationSection { private static BlogSettings settings = ConfigurationManager.GetSection("BlogSettings") as BlogSettings; public static BlogSettings Settings { get { return settings; } } [ConfigurationProperty("frontPagePostCount" , DefaultValue = 20 , IsRequired = false)] [IntegerValidator(MinValue = 1 , MaxValue = 100)] public int FrontPagePostCount { get { return (int)this["frontPagePostCount"]; } set { this["frontPagePostCount"] = value; } } [ConfigurationProperty("title" , IsRequired=true)] [StringValidator(InvalidCharacters = " ~!@#$%^&*()[]{}/;’\"|\\" , MinLength=1 , MaxLength=256)] public string Title { get { return (string)this["title"]; } set { this["title"] = value; } } }
Notice that you use an indexed property to store and retrieve each property value.
I also added a static property named Settings for convenience.
Step 2 - Add your new configuration section to web.config (or app.config).
<configuration> <configSections> <section name="BlogSettings" type="Fully.Qualified.TypeName.BlogSettings, AssemblyName" /> </configSections> <BlogSettings frontPagePostCount="10" title="You’ve Been Haacked" /> </configuration>
Step 3 - Enjoy your new custom configuration section
string title = BlogSettings.Settings.Title;
Response.Write(title); //it works!!!
What I covered is just a very brief overview to get you a taste of what is available in the Configuration API. I wrote more about configuration in the book I’m cowriting with Jeff Atwood, Jon Galloway, and K. Scott Allen.
If you want to get a more comprehensive overview and the nitty gritty, I recommend reading Unraveling the Mysteries of .NET 2.0 Configuration by Jon Rista.
No hay comentarios:
Publicar un comentario