2012-02-02 11 views
8

Istnieje duża aplikacja WPF z kilkoma modułami, oknami, samodzielnie napisanymi kontrolkami itp. Musimy zachować stan dla niektórych elementów interfejsu użytkownika. Na przykład:Czy istnieje jakiś popularny sposób zapisywania ustawień aplikacji w bardziej zaawansowany sposób niż zwykły plik .settings?

  • układ okien;
  • układ sterowania;
  • ostatnie zaakceptowane wejście; Państwo (kolumny
  • różnych siatek widoczność, szerokość, kolejność)

.settings plik wydaje się zbyt proste dla tego, ponieważ nie ma w nim hierarchii. Dlaczego nie mogę po prostu serializować niektórych SettingsModel, zawierających wszystko, czego potrzebuję, a następnie przywrócić go podczas uruchamiania aplikacji? Bardzo ważnym wymaganiem dla mechanizmu utrwalania jest to, że powinien on być rozszerzalny: Jeśli zmienię strukturę ustawień i spróbuję odserializować plik utworzony za pomocą poprzedniej wersji klasy SettingsModel, oczywiście zawiodę.

Tak więc quiestion: czy istnieją ramy dla utrzymywania złożonych ustawień?

+3

Dlaczego nie przechowywać danych w pliku XML? – Rachel

+0

Rachel, a potem co? Napisz parser o 200 liniach? napisz jeszcze raz po każdym refaktoryzacji? –

+0

Zwykle nie pracuję z XML (korzystam z bazy danych), ale jestem pewien, że istnieje kilka gotowych obiektów, których można użyć do łatwego odczytu/zapisu danych w plikach XML. Nie powinieneś pisać parsera, chociaż prawdopodobnie będziesz musiał napisać coś, co odwzoruje dane XML do/z twojego obiektu. – Rachel

Odpowiedz

2

Plik .Settings obsługuje changing the structure over time. Nie musisz nawet używać pliku Settings.cs, aby utworzyć własny plik settings providers i zapełnić go z pliku konfiguracyjnego, każdy z własną dostosowaną metodą uaktualnienia w celu obsługi zmian w strukturze.

+0

Hmm, to wydaje się być najbliższe temu, czego szukam. –

1

app.config to kolejna popularna lokalizacja przechowywania. Łatwo można uzyskać dostęp do ustawień pliku konfiguracyjnego z poziomu aplikacji, a możesz nawet utworzyć własne niestandardowe konfiguracje

+2

Aplikacja app.config jest przeznaczona do ustawień aplikacji - nie do specyficznych ustawień użytkownika. Wartości te powinny być przechowywane w pliku ustawień (zwykle xml) w katalogu aplikacji użytkownika. Plik app.config znajduje się zwykle w katalogu Program Files \ ProgramName i nie można go modyfikować z powodu ograniczeń UAC w większości nowych systemów operacyjnych. – tsells

+0

nigdy nie wiedział, a nawet nie rozważał tej możliwości. dzięki za głowy. – deltree

3

Jak zasugerowała Rachel, możesz użyć XML serialization, i zawsze używam tego dla ustawień, ma pewną tolerancję na zmiany, ale robię nie wiem, czy pasowałoby to do wszystkich twoich potrzeb.

+0

zgodził się, jeśli wbudowane ustawienia aplikacji (na użytkownika/całej aplikacji) nie działają na jeden, XML jest prawdopodobnie kolejnym najlepszym wyborem. – kenny

1

Zrobiłem to, pisząc własny kod serializacji do XML, oznaczając elementy pasujące do pól konfiguracji. Kiedy deserializuję, wysyłam zapytanie do XML dla każdego elementu, który chcę wypełnić. Jeśli deserializuję starą wersję do nowego schematu konfiguracji, który ma dodatkowe elementy, zapytanie XML zwraca wartość null, a ja wstawię domyślną wartość. Pozwala mi obsłużyć listy danych hierarchicznych, mogę zaszyfrować dowolną jego część, a nie wersję XML. Chociaż jest to trochę więcej pracy niż XMLSerializer, moje dane konfiguracyjne nie zmieniają się zbyt często, więc warto.

Ponieważ możesz mieć wielu użytkowników, możesz zapisać kod XML każdego użytkownika jako ciąg w bazie danych. System.Data.Sqlite, RaptorDb i FileDb dobrze się sprawdzają, podobnie jak PersistentDictionary.

Kolejną alternatywą jest przechowywanie danych w słownikach słowników i użycie SharpSerializer, aby zapisać je jako plik XML do pliku lub jednej z powyższych baz danych.

Powiązane problemy