ApplicationSettings Wrapper

Written on November 27, 2003

Gestern tauchte in der ASP.NET-Mailingliste die Frage auf, wie man am geschicktesten und möglichst resourcenschonend auf die Application-Settings der web.config zugreifen könnte.

Normalerweise geschieht der Zugriff etwa in dieser Form:

web.config (Auszug):
<?xml version="1.0" encoding="utf-8" ?>

<add key="ConnectionString"
value="PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source="mydb.mdb" />


mypage.aspx.cs:
SqlConnection cn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);

Dies ist allerdings weder gut lesbar, noch sind die Application-Settings damit typsicher. Ferner schleichen sich leicht Tippfehler in den Bezeichnungen ein, welche mit der Anzahl der Settings steigen.

Markus Renschler kam dabei auf einen ebenso einfachen wie genialen Ansatz, wie man alle drei genannten Nachteile abschaffen kann. Kurzerhand bauten wir uns in der Liste einen AppSettings-Wrapper. Dieser wandelt die gespeicherten Application-Settings in typfeste, nur lesbare Variablen um und cached diese, falls nötig - ein weiterer Vorteil des Wrappers. Aufgrund der sich daraus ergebenden Objektorientierung der Settings, stehen diese nun auch über die Intellisense von VS.NET zur Verfügung - Tippfehler und das Vergessen der Bezeichnung der Settings sind ausgeschlossen.

Der Wrapper sieht nun wie folgt aus:

using System;
using System.Configuration;
using System.Web;

namespace DotNetGerman.WrapperSample
{
internal class Configuration
{
///
/// Liefert den in der web.config gespeicherten
/// Connectionstring zurück.
///

public static string ConnectionString
{
get
{
return LoadConfigValue("ConnectionString");
}
}

///
/// Liefert den angefordeten Keyvalue aus der
/// web.config zurück und cached diesen, falls
/// noch nicht gecached.
///

/// Der angefordete Keyname
/// in der web.config
/// Der Keyvalue aus der web.config.
private static string LoadConfigValue(string nameInWebConfig)
{
string nameInApplication = "Config" + nameInWebConfig;
HttpApplicationState app = HttpContext.Current.Application;
if( app[nameInApplication] == null )
{
app[nameInApplication] =
ConfigurationSettings.AppSettings[nameInWebConfig];
}
return
app[nameInApplication].ToString();
}
}
}

Der Aufruf erfolgt folgendermaßen:

mypage.aspx.cs (Auszug):
SqlConnection cn = new SqlConnection(Configuration.ConnectionString);