Vor kurzem hatte ich ausprobiert, ob der Zugriff auf die Einstellungen einer Anwendung vereinfacht werden kann. Mit den Einstellungen meine ich die bekannten AppSettings, die in der App.config
gespeichert werden. In der Regel erfolgt der Zugriff über den ConfigurationManager
und genauer gesagt über die Anweisung ConfigurationManager.AppSettings[key]
. Zurückgeliefert wird immer eine Zeichenkette.
Wirklich aufwändig ist das natürlich nicht, aber unter Zuhilfenahme von Erweiterungsmethoden kann der Zugriff anders gestaltet werden. Die Entscheidung, ob das einfacher oder besser ist, überlasse ich dem wehrten Leser.
Die Idee dahinter ist ganz simpel. Über eine Erweiterungsmethode kann die String-Klasse erweitert werden. Das erlaubt es, beliebige Zeichenketten im Code direkt als Schlüssel für eine Einstellung zu verwenden. Das folgende Gist zeigt die Implementierung für eine generische Erweiterungsmethode. In meinem Beispielprojekt habe ich noch eine nicht generische Variante implementiert, die noch ein paar Zeilen weniger enthält und einfach die Zeichenkette zurück gibt.
[gist id=4997012 file=AppSettings.cs]
Die Implementierung ist dabei recht einfach und relativ unspannend. Wenn der Schlüssel existiert, wird der Inhalt der Einstellung zurückgeliefert. Damit auch immer der angegebene Typ zurückgeliefert werden kann, wird das Setting über den TypeDescriptor
umgewandelt. Das Verfahren beziehungsweise die Implementierung dazu habe ich schon in einem vorherigen Blog-Artikel beschrieben.
Durch diese Erweiterungsmethode kann nun sehr einfach auf eine Einstellung zugegriffen werden. Ein Aufruf von "StringSetting".AppSetting<string>()
reicht beispielsweise aus, um auf das Setting mit dem Namen StringSetting
zuzugreifen und das Ergebnis als String
zurück zu bekommen. Auch andere Typen sind selbstverständlich möglich, wie beispielsweise Guids
, auf die über "GuidSetting".AppSetting<Guid>()
zugegriffen werden kann.
Die Frage, die ich mir bei der Implementierung gestellt habe, ist, ob diese Erweiterungsmethoden eine gute Idee sind. Den Zugriff auf eine Einstellung finde ich dadurch sehr elegant. Ob ich aber die String
-Klasse beziehungsweise eine Zeichenkette im Code ständig auch damit assoziieren möchte, dass ich die Methode AppSetting
aufrufen kann, weiß ich noch nicht. Ich denke, ich werde die Erweiterungsmethoden im nächsten Projekt mal ausgiebiger testen.
Die Erweiterungsmethode ist eine tolle Idee. Ich kann mir den Einsatz gut vorstellen, würde aber den Zugriff auf die ApplicationSettings hinter einem Interface verstecken, um auch auf eine eigene Implementierung zugreifen zu können. So können die Einstellungen dann auch aus einer JSON-Datei oder ähnlichem kommen.
Gute Idee! Daran sollte in einem realen Projekt gedacht werden. Danke für den Hinweis.