Gibt es eine gängige Methode zum Speichern von Anwendungseinstellungen auf komplexere Weise als die einfache .settings-Datei?

8

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:

  • Windows-Layout;
  • steuert das Layout;
  • letzte akzeptierte Eingabe;
  • Zustand verschiedener Gitter (Sichtbarkeit, Breite, Reihenfolge der Spalten)
Die Datei

​​.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?

    
Ilya Smagin 02.02.2012, 18:10
quelle

4 Antworten

2

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.

    
Scott Chamberlain 02.02.2012, 20:06
quelle
3

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.

    
H.B. 02.02.2012 18:53
quelle
1

app.config ist ein weiterer allgemeiner Speicherort. Auf die Einstellungen der Konfigurationsdatei kann einfach über die Anwendung zugegriffen werden, und Sie können sogar Ihre eigenen benutzerdefinierten configSections

erstellen     
deltree 02.02.2012 18:49
quelle
1

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.

    
Ed Power 02.02.2012 22:54
quelle

Tags und Links