2013-08-23 4 views
7

아직 만족스러운 답을 찾지 못해서 물어볼 생각입니다. 파일에 UI 설정을 저장하는 모범 사례가 있습니까?파일에 UI 설정을 저장하는 모범 사례가 있습니까?

우리는 외부의 명령을 실행할 때 사용할 플래그, 선택 가능한 비교 알고리즘에 전달할 선택적 인수와 함께 파일/폴더 배열을 저장할 C# 응용 프로그램을 내부에 가지고 있습니다. , 등). 이러한 값의 성격 때문에, 내장 된 app.config 메소드를 사용하는 것은 효과가 없을 것입니다. 세미 컴파일 설정을 설정 파일에 저장할 때 모범 사례가 있습니까?

현재 가장 복잡한 것은 파일 이름, 알고리즘 및 인수 텍스트 비교를 저장해야하는 단일 항목이있는 목록입니다. 따라서 모든 간단한 키/값 데이터가 아닙니다. 나는에 대한 생각을 찾고 있어요

:

  • 레이아웃
  • 형식 (XML, YAML 등)
  • . (예 : XML은 값이 node.value 대 속성에 있어야하는 경우) 프레임 워크

이것은 중요한 데이터를 저장하지 않으므로 보안에 문제가되지 않습니다.

저는 현재 XmlDocument를 사용하고 각각 다른 컬렉션에 대해 별도의 클래스를 찾고 있습니다. 하지만 이미 기존 프레임 워크가 있어야 할 것 같아요.

감사합니다.

+0

는 모두가 하나가 WPF 설정을 저장 및/또는 해당 파일의 위치 것 방법에 대해 설명 그 질문에 대한 답변으로 중복되지 않습니다. 구조화 된 설정 및 모범 사례를 저장하려고합니다. –

+0

"우수 사례"는 "귀하의 의견은 무엇입니까?"와 동의어입니다. 주제에서 벗어난 것은 어느 것입니까 (해설 된 답변으로 인해 문제가 발생 함). –

답변

2

app.config를 어수선하게 다루지 않으려는 경우 사용자 정의 구성 섹션을 정의한 다음 설정을 별도의 구성 파일에 저장할 수도 있습니다. 사용자 정의 구성 모듈을 사용하면 복잡한 설정을위한 구조를 정의하고이를 표준 구성 파일에 저장할 수 있습니다. Entity Framework, Enterprise Library 등을 사용했다면 아마도 파일의 맨 위에 정의 된 것을 보았을 것입니다. Google에서 빠른 검색으로 주제에 대한 또 다른 StackOverflow 소식이 나타났습니다. 나는이 느낌

How to create custom config section in app.config

+0

나는이 선을 따라 뭔가를 생각하고 있었다. 고맙습니다! –

9

그런 설정은 app.config 파일에 저장해서는 안됩니다. 거기에 혼란을 더합니다. 이 경우 이미 티켓에서 언급 한 것처럼 다른 구성 파일을 만드는 것이 좋습니다.

이 구성 파일을 XML 문서로 구성 할 계획입니다. 이것은 좋은 생각입니다. 이것은 또한 설정 데이터가 구성되었음을 의미합니다. 너무 좋습니다.

JSON을 제안 해 드리겠습니다. 이렇게하면 매우 적은 코드 행으로 구성 설정을 런타임에 응용 프로그램에로드 할 수 있습니다. 시도해보십시오 NewtonSoft.JSON (일명 JSON.Net).

당신은 신속하게 구성 설정을 추가하고 사용하려면 다음이 단계를 수행 할 수 있습니다

  1. 이 NewtonSoft.JSON 프로젝트 및 NewtonSoft를 사용하여 .cs 파일 (이 라이브러리에 대한 참조를 추가 Nuget 패키지 관리자
  2. 를 사용하여 설치합니다. Json)
  3. 구성 설정에 대한 C# 클래스를 만듭니다. 반복 블록의 경우 List<string> 또는 다른 관련 데이터 유형 인 심지어 int을 사용할 수 있으므로 유형 변환도 필요하지 않습니다. 같은 문자열 객체
  4. 사용 JsonConvert.DeserializeObject()
  5. 읽기 JSON 파일 : 여기

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

MyConfigSettings 구성 설정 클래스입니다.해당 구성원은 적절한 get; set; 속성이 정의 된 public 속성으로 선언되어야합니다.

이렇게하면 모든 구성 설정이 settings 개체로로드됩니다. 가장 중요한 부분은 누락 된 구성 값이 자동으로 건너 뛸 수 있으므로 복잡한 구문 분석 알고리즘이 필요하지 않습니다. 4.0 이상

닷넷을이 필요한 것 :

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

참고 :

당신이 settings 객체에 값을 채우고 사용하여 직렬화 수하는 JSON 파일에 설정 값을 작성하려면

빠른 시작은 this example입니다.

+0

구성 섹션을 사용하여 즉시 사용할 수있는 솔루션을 제공하는 것이 최선의 방법이라고 생각합니다. – ivowiblo

+0

나는이 솔루션을 좋아하지만, ivowiblo가 언급했듯이, 상자에서 벗어난 것을 갖는 것이 더 이상적이다. C#으로 프로그래밍하지 않았다면 아마도 이것을 구현할 것입니다. –

관련 문제