Neulich hatte ich mit Thomas eine kurze Unterhaltung über die Problematik der Team-Entwicklung. Ein Problem sind die verschiedenen Einstellungen für die AppSettings und ConnectionStrings. Nun wurde dies auch bei mir akut und bin zur folgenden Lösung gekommen. Ich hatte schon vorher den Zugriff auf die AppSettings gekapselt, so habe ich nie direkt auf die AppSettings zugegriffen, sondern über statische Methode einer Klasse. Also nicht
sondern [c#]
Dies sah in der Implementation - vereinfacht - so aus
In Realität ist es ein wenig aufwendiger, so gab es Standardwerte, Typumwandlungen usw.
Nun gut, dies löst jedoch nicht direkt das Problem der Team-Entwicklung wenn z. B. verschiedene Entwickler verschiedene ConnectionStrings oder andere Angaben brauchen. Entwickler spezifische Settings-Dateien haben den Nachteil dass diese z.B. nicht in der Quellcode-Verwaltung zu landen oder dass man damit irgendwann einfach durcheinander kommt, da irgendwo die eigentliche Datei ja doch eingebunden werden muss. Deshalb nutze ich weiterhin den Ansatz von gemeinsamen Konfigurationsdateien, diese können jedoch Entwickler spezifische Einträge enthalten. Dazu muss der Entwickler nur identifiziert werden können, dies kann z. B. über den Benutzernamen oder den Namen des Rechner geschehen. Dies kann dann in der Konfiguration so ausehen.
Zusätzlich zu den Standard-Settings existieren dann, bei Bedarf, zusätzliche Einträge denen einfach der Name des Rechners angehangen ist. Den Zugriff darauf natürlich wieder gekapselt, so dass der Zugriff bei der Anwendung Transparent abläuft. Dazu habe ich eine ApplicationSettings Klasse für C# 2.0 entwickelt die mir die Arbeit abnimmt. Diese sieht so aus (die vollständige Implemetation befindet sich weiter unten)
Umgemünzt auf mein genanntes Beispiel von oben sieht dann meine Implementation von MySettings nun so aus.
Beim Initialize() könnte man auch Environment.UserName übergeben, dies hängt dann von den Anforderungen ab. Die SettingsPrefix Eigenschaft kann man noch überschreiben wenn man noch einen Prefix für alle Einstellungen vor dem Namen des Keys braucht.
Mit meiner ApplicationSettings-Klasse hat man einen einfachen, typsicheren Zugriff auf die Absettings. Hier nun der Code.