2013-08-23 5 views
7

Ich habe noch keine befriedigende Antwort dafür gefunden, also dachte ich, ich würde fragen. Gibt es Best Practices zum Speichern von UI-Einstellungen in einer Datei?Gibt es Best Practices zum Speichern von UI-Einstellungen in einer Datei?

Das Szenario ist, dass wir eine interne C# -App haben, die ich ein Array von Dateien/Ordnern zusammen mit anderen zufälligen Dingen speichern möchte (Flags zum Ausführen eines externen Befehls, optionale Argumente an auswählbare Vergleichsalgorithmen übergeben) , etc). Aufgrund der Art dieser Werte funktioniert die Verwendung der integrierten app.config-Methoden nicht. Gibt es Best Practices beim Speichern von semi-komplexen Einstellungen in einer Einstellungsdatei?

Momentan ist die komplexeste, die ich speichere, eine Liste mit einem einzigen Eintrag, der einen Dateinamen, einen Algorithmus und einen Argumenttext speichern muss. Es sind also nicht nur einfache Schlüssel/Wert-Daten.

Ich suche Gedanken auf:

  • Layout
  • Format (XML, YAML, usw.)
  • (. Ex wenn XML-Werte sollten in den Attributen vs node.value sein) frameworks

Dies wird keine sensiblen Daten speichern, so dass die Sicherheit keine Rolle spielt.

Ich bin derzeit auf der Suche nach XmlDocument und separate Klassen für jede andere Sammlung zu verwenden. Aber ich habe das Gefühl, dass es bereits einen bestehenden Rahmen dafür geben sollte.

Vielen Dank!

+0

ich das Gefühl, kein Duplikat ist, wie die Antworten auf diese Frage alle beschreiben, wie man würde speichern WPF-Einstellungen und/oder die Position der Datei. Ich möchte strukturierte Einstellungen und Best Practices dafür speichern. –

+0

"Best Practices" ist ein Synonym für "Was ist Ihre Meinung dazu?" Das ist völlig nebensächlich (weil rechthaberische Antworten Probleme machen). –

Antwort

2

Sie können auch einen benutzerdefinierten Konfigurationsabschnitt definieren und dann die Einstellungen in eine separate Konfigurationsdatei einfügen, wenn Sie Ihre app.config nicht überladen möchten. Ein benutzerdefiniertes Konfigurationsmodul ermöglicht es Ihnen, eine Struktur für Ihre eigenen komplexen Einstellungen zu definieren und diese in einer Standardkonfigurationsdatei zu speichern. Wenn Sie Entity Framework, Enterprise Library oder ähnliches verwendet haben, haben Sie diese wahrscheinlich am Anfang der Datei definiert. Eine schnelle Suche bei Google ergab einen weiteren StackOverflow-Beitrag zum Thema.

How to create custom config section in app.config

+0

Ich dachte irgendwie an etwas in dieser Richtung. Vielen Dank! –

9

Sie haben Recht, dass solche Einstellungen nicht in der app.config-Datei gespeichert werden sollten. Es fügt nur Krempel dort hinzu. In diesem Fall wäre es besser, eine andere Konfigurationsdatei zu erstellen, wie Sie bereits in Ihrem Ticket erwähnt haben.

Sie planen, diese Konfigurationsdatei als XML-Dokument zu strukturieren. Das ist eine großartige Idee. Dies bedeutet auch, dass Ihre Konfigurationsdaten strukturiert sind. Das ist auch toll.

Ich würde vorschlagen, dass Sie für JSON gehen. Dadurch können Sie Konfigurationseinstellungen zur Laufzeit mit sehr wenigen Codezeilen in Ihre Anwendung laden. Versuchen Sie NewtonSoft.JSON (alias JSON.Net).

können Sie die folgenden Schritte schnell hinzuzufügen und Konfigurationseinstellungen zu verwenden:

  1. installieren NewtonSoft.JSON Nuget Paket-Manager
  2. In Bezug auf diese Bibliothek zu einem Projekt und CS-Datei (mit NewtonSoft verwenden. Json)
  3. Erstellen Sie eine C# -Klasse für Ihre Konfigurationseinstellungen. Für sich wiederholende Blöcke können Sie List<string> oder einen anderen relevanten Datentyp verwenden, sogar int - so müssen Sie auch keine Typumwandlung vornehmen.
  4. lesen JSON-Datei in ein String-Objekt
  5. Verwenden JsonConvert.DeserializeObject() wie:

MyConfigSettings settings = JsonConvert.DeserializeObject<MyConfigSettings>(jsonString);

Hier MyConfigSettings ist die Klasse Konfigurationseinstellungen.Die entsprechenden Mitglieder müssen als public Eigenschaften mit korrekten get; set; Attributen definiert werden.

Dies würde alle Konfigurationseinstellungen auf das Objekt settings laden. Der beste Teil ist, dass alle fehlenden Konfigurationswerte automatisch übersprungen werden, so dass Sie keine komplexen Parsing-Algorithmen benötigen.

config Werte in eine JSON-Datei zu schreiben, Sie Werte im settings Objekt besiedeln können und serialisiert sie mit:

// Indented so that it looks readable when the config file is opened in editor like Notepad 
string data = JsonConvert.SerializeObject<MyConfigSettings>(settings, Formatting.Indented); 
// Now just store string object data to the config file 

Hinweis: Dies würde erfordern, .Net 4.0 +

Ein schneller Start ist in this example gegeben.

+0

Ich habe eine Out-of-the-Box-Lösung für diese Konfiguration, ich denke, das ist bei weitem nicht die beste Vorgehensweise. – ivowiblo

+0

Ich mag diese Lösung, aber wie ivowiblo erwähnt, etwas außerhalb der Box ist ideal. Ich denke, wenn ich nicht in C# programmieren würde, würde ich das wahrscheinlich umsetzen. –

Verwandte Themen