Generieren Sie automatisch eine stark typisierte AppSettings-Klasse

Hier ist die Frage zuerst:

Ist das möglich? Ich nehme meine Inspiration vonJoe Wrobels Arbeit (Ein Wiedergutmachung der VergessenenCodeplex-Projekt). Hier arbeiten Sie an der Erstellung Ihres Profils für den Anbieter und an der Erstellung der starken Typisierung für den Anbieter, wodurch effektiv eine Fassade für die Profilklasse erstellt wird.

Und jetzt die Hintergrundgeschichte!

Ich mag es wirklich nichtmagische Saiten. Sie sind ziemlich schlimm und können ernsthafte Probleme beim Aktualisieren Ihrer Anwendung verursachen. Nachdem ich in Sprachen wie PHP und ColdFusion gearbeitet habe, weiß ich, dass es einfach ist, sie in Ihre Anwendung einzufügen und zu vergessen, bis Sie eine ändern müssen. Und dann muss man jede Variation aufspüren und entsprechend verändern.

.NET ist wirklich nicht viel besser, wenn Sie die Standardanwendungsvorlagen befolgen. Viele Beispiele verwenden die Appsettings in der web.config, um verschiedene Einstellungen zu speichern. Dies ist in der Tat ein guter Ort zum Speichern und ist für die meisten Anwendungen perfekt. Probleme treten jedoch auf, wenn Sie diese direkt aufrufen - zum BeispielConfigurationManager.AppSettings["MyAppSetting"]. Dann sind Sie nicht wirklich besser dran als ein PHP-Benutzer, da Sie wieder Magic Strings verwenden.

Das ist woFassaden hereinkommen. Fassaden bieten die Möglichkeit, ein stark typisiertes Objekt aus einer magischen Zeichenfolge an einer Stelle zu erstellen und den Entwickler auf das Objekt aus der restlichen Anwendung verweisen zu lassen.

Anstatt eine web.config zu verwenden, um meine Apps-Einstellungen zu enthalten, verwende ich jetzt eine Datenbank, um sie alle zu speichern. Beim Start der Anwendung werden die Name / Wert-Combos abgerufen und anschließend der Reihe nach zugefügtConfigurationManager.AppSettings überSet. Kein biggie (abgesehen von derProblem Ich hatte früher!).

Diese 'Anwendungsfassade' ist für meine Daten-, Dienst- und Präsentationsschicht zugänglich und enthält Dinge wie den Anwendungsmodus, den Dienstendpunkt für die Verwendung von yada yada yada und begrenzt die Notwendigkeit, nach vielen magischen Zeichenfolgen suchen zu müssen, auf zwei magische Saiten - eine (der Name) in der Fassade und die andere (der Name und der Wert) im Schöpfungspunkt (der für mich die DB ist).

Diese Fassadenklasse wird irgendwann ziemlich groß und ich werde es irgendwann leid, beide aktualisieren zu müssen.

Ich möchte also eine ApplicationFacade-Klasse haben, die jedes Mal automatisch generiert wird, wenn ein Build durchgeführt wird. Und jetzt zurück zum Anfang ... Ist das möglich?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage