Es gibt eine große WPF-Anwendung mit mehreren Modulen, Fenstern, selbstgeschriebenen Steuerelementen usw. Wir müssen den Status für einige Elemente der Benutzeroberfläche beibehalten. Zum Beispiel:
.Settings scheint zu einfach zu sein, da keine Hierarchie darin enthalten ist.
Warum kann ich nicht einfach einige SettingsModel
serialisieren, die alles enthalten, was ich brauche, und sie dann beim Start der Anwendung wiederherstellen?
Die sehr wichtige Voraussetzung für den Persistenzmechanismus ist, dass er erweiterbar sein sollte: Wenn ich die Einstellungsstruktur umgestalte und versuche, die mit einer früheren Version von SettingsModel
class erstellte Datei zu deserialisieren, werde ich das natürlich tun scheitern.
Die Frage ist also: Gibt es Rahmenbedingungen für das Fortbestehen komplexer Einstellungen?
Die Datei .Settings unterstützt die Struktur im Zeitverlauf . Sie müssen nicht einmal die Datei Settings.cs verwenden, um eigene Einstellungs-Provider zu erstellen und lassen Sie sie aus der Konfigurationsdatei auffüllen, jede mit ihrer eigenen angepassten Upgrade-Methode, um Änderungen in der Struktur zu behandeln.
Wie Rachel vorgeschlagen hat, könnten Sie XML-Serialisierung verwenden, d für einen benutze immer das für Einstellungen, es hat einige Toleranz für Änderungen, aber ich weiß nicht, ob es all Ihre Bedürfnisse passen würde.
Ich habe dies getan, indem ich meinen eigenen Serialisierungscode in XML geschrieben habe und die Elemente so beschriftet habe, dass sie den Konfigurationsfeldern entsprechen. Wenn ich deserialize, frage ich das XML für jedes Element ab, das ich füllen möchte. Wenn ich eine alte Version in ein neues Konfigurationsschema deserialisiere, das zusätzliche Elemente enthält, gibt die XML-Abfrage null zurück und ich füge stattdessen einen Standardwert ein. Es erlaubt mir, Listen von hierarchischen Daten zu handhaben, ich kann jeden Teil davon verschlüsseln, den ich brauche, und ich versioniere das XML nicht. Obwohl es ein bisschen mehr Arbeit als die Verwendung von XMLSerializer ist, ändern sich meine Konfigurationsdaten nicht sehr oft, so dass es sich gelohnt hat.
Da Sie viele Benutzer haben können, können Sie die XML jedes Benutzers als Zeichenfolge in einer Datenbank speichern. System.Data.Sqlite , RaptorDb , und FileDb funktioniert dafür ebenso gut wie PersistentDictionary .
Eine weitere Alternative besteht darin, Ihre Daten in Wörterbüchern von Wörterbüchern zu speichern und SharpSerializer zu verwenden, um sie als XML zu speichern entweder eine Datei oder eine der oben genannten Datenbanken.