2013-08-23 81 views
7

Tôi chưa thấy câu trả lời thỏa đáng cho điều này, vì vậy tôi đã hỏi. Có bất kỳ phương pháp hay nhất nào để lưu trữ cài đặt giao diện người dùng trong tệp không? Kịch bản là chúng tôi có một ứng dụng C# trong nhà mà tôi muốn lưu trữ một mảng các tập tin/thư mục cùng với những thứ ngẫu nhiên khác (cờ để sử dụng khi thực hiện một lệnh bên ngoài, đối số tùy chọn để chuyển sang các thuật toán so sánh có thể chọn được). , v.v.) Do tính chất của các giá trị này, việc sử dụng các phương thức app.config được xây dựng sẽ không hoạt động. Vì vậy, có bất kỳ thực hành tốt nhất khi lưu trữ các thiết lập bán phức tạp cho một tập tin cài đặt?Có phương pháp hay nhất để lưu cài đặt giao diện người dùng trong tệp không?

Hiện tại, phức tạp nhất mà tôi đang lưu trữ sẽ là danh sách có một mục nhập duy nhất cần lưu trữ tên tệp, so sánh thuật toán và văn bản đối số. Vì vậy, nó không phải tất cả dữ liệu khóa/giá trị đơn giản.

Tôi đang tìm những suy nghĩ về:

  • layout (. Cũ nếu XML, các giá trị phải ở trong các thuộc tính vs node.value)
  • định dạng (XML, YAML, vv)
  • khuôn khổ

Điều này sẽ không lưu trữ dữ liệu nhạy cảm, vì vậy bảo mật không phải là mối quan ngại.

Tôi hiện đang tìm cách chỉ sử dụng XmlDocument và các lớp riêng biệt cho từng bộ sưu tập khác nhau. Nhưng tôi cảm thấy như có một số khung hiện có cho điều này.

Cảm ơn bạn!

+0

tôi cảm thấy đây không phải là một bản sao như câu trả lời cho câu hỏi rằng tất cả các mô tả cách người ta sẽ lưu các thiết lập WPF và/hoặc vị trí của tập tin đó. Tôi đang tìm cách lưu trữ các cài đặt có cấu trúc và thực tiễn tốt nhất cho điều đó. –

+0

"Các phương pháp hay nhất" là một từ đồng nghĩa cho "Ý kiến ​​của bạn về điều này là gì?" Mà là squarely tắt chủ đề (vì câu trả lời ý kiến ​​vẽ rắc rối). –

Trả lời

2

Bạn cũng có thể xác định phần cấu hình tùy chỉnh và sau đó đặt các cài đặt trong tệp cấu hình riêng biệt nếu bạn không muốn làm lộn xộn ứng dụng của mình.config. Một mô-đun cấu hình tùy chỉnh cho phép bạn xác định cấu trúc cho các thiết lập phức tạp của riêng bạn và lưu trữ chúng trong một tệp cấu hình chuẩn. Nếu bạn đã sử dụng Entity Framework, Enterprise Library hoặc tương tự, thì có thể bạn đã thấy chúng được định nghĩa ở đầu tệp. Một tìm kiếm nhanh trên Google đã bật lên một bài đăng StackOverflow khác về chủ đề này.

How to create custom config section in app.config

+0

Tôi đã loại suy nghĩ của một cái gì đó dọc theo những dòng này. Cảm ơn bạn! –

9

Bạn nói đúng rằng các cài đặt như vậy sẽ không được lưu trữ trong tệp app.config. Nó chỉ thêm lộn xộn ở đó. Trong trường hợp này, sẽ tốt hơn nếu bạn tạo một tệp cấu hình khác như bạn đã đề cập trong vé của mình.

Bạn đang có kế hoạch cấu trúc tệp cấu hình này dưới dạng tài liệu XML. Ý kiến ​​hay. Điều này cũng có nghĩa là dữ liệu cấu hình của bạn được cấu trúc. Điều đó thật tuyệt.

Tôi khuyên bạn nên sử dụng JSON. Điều này sẽ cho phép bạn tải các thiết lập cấu hình vào ứng dụng của bạn tại thời gian chạy với rất ít dòng mã. Hãy thử NewtonSoft.JSON (aka. JSON.Net).

Bạn có thể làm theo các bước sau để nhanh chóng thêm và sử dụng các thiết lập cấu hình:

  1. Install NewtonSoft.JSON sử dụng NuGet Package Manager
  2. Thêm tham chiếu đến thư viện này để dự án của bạn và file .cs (sử dụng NewtonSoft. Json)
  3. Tạo lớp C# cho cài đặt cấu hình của bạn. Để lặp lại các khối, bạn có thể sử dụng List<string> hoặc bất kỳ loại dữ liệu có liên quan nào khác, ngay cả int - vì vậy bạn không phải thực hiện bất kỳ chuyển đổi loại nào.
  4. đọc JSON tập tin vào một đối tượng chuỗi
  5. Sử dụng JsonConvert.DeserializeObject() như:

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

Đây MyConfigSettings là lớp thiết lập cấu hình.Các thành viên tương ứng sẽ phải được khai báo là public thuộc tính với các thuộc tính thích hợp get; set; được xác định.

Thao tác này sẽ tải tất cả cài đặt cấu hình về đối tượng settings. Phần tốt nhất là bất kỳ giá trị cấu hình bị thiếu, sẽ được tự động bỏ qua, do đó bạn không cần phải có bất kỳ thuật toán phân tích cú pháp phức tạp nào.

Để viết các giá trị cấu hình vào một tập tin JSON, bạn có thể cư giá trị trong đối tượng settings và serialize họ sử dụng:

// 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 

Lưu ý: này sẽ yêu cầu Net 4.0 +

Bắt đầu nhanh trong this example.

+0

Có một giải pháp out-of-the-box cho phần này bằng cách sử dụng cấu hình, tôi nghĩ rằng đây là xa thực hành tốt nhất. – ivowiblo

+0

Tôi thích giải pháp này, nhưng như ivowiblo đã đề cập, có một cái gì đó ra khỏi hộp là lý tưởng hơn. Tôi cảm thấy nếu tôi không lập trình trong C# thì có lẽ tôi sẽ thực hiện điều này. –