AppSettings 접근¶
구성 설정 파일(디폴트 파일 neodeex.config.json
)에 "appSettings"
섹션을 추가하여 어플리케이션 설정을 기록할 수 있습니다. 과거 .NET Framework에서 app.config 혹은 web.config에서 <appSettins>
섹션을 사용하는 것과 유사합니다.
"appSettings"
구성 설정에 접근하기 위해서는 FoxConfigurationManager
클래스의 정적 속성인 AppSettings
속성을 사용하면 됩니다.
FoxConfigurationAppSettings 클래스¶
AppSettings
속성은 FoxConfigurationAppSettings
클래스의 인스턴스로서 "appSettings"
섹션에 대한 다양한 기능을 제공합니다.
this
인덱서¶
FoxConfigurationAppSettings
클래스의 인덱서(this
)는 단순한 키를 사용하여 "appSettings"
섹션의 설정을 문자열로 반환합니다. 키로 사용되는 값은 대/소문자를 구별하지 않습니다.
인덱서가 설정 값을 문자열로 반환한다는 점에 주의해야 합니다. 위 코드에서 setting3
변수의 값은 "True"
입니다. 구성 설정의 JSON 타입은 boolean
이지만 이 타입이 .Net 문자열로 변환되어 반환되면서 AppSettings["settings"]
식이 "True"
를 반환하게 됩니다.
이와 같은 작동 방식은 Fox Configuration이 내부적으로 사용하는 Microsoft.Extensions.Configuration 구현의 작동 방식 입니다.
구성 설정에 존재하지 않는 키에 대해 인덱서를 호출하는 경우, null
이 반환됩니다. 이는 이후 설명할 GetValue<T>
메서드나 Get<T>
메서드에 대해서도 동일합니다.
GetValue<T>
메서드¶
FoxConfigurationSettings
클래스는 "appSettings"
섹션의 설정이 JSON 타입 값을 구할 수 있도록 GetValue<T>
메서드가 제공됩니다. 이 메서드를 통해 설정의 타입 값을 구할 수 있습니다.
위 코드는 "appSettings:setting3"
의 값으로 bool
타입 true
를 반환하며, "appSettings:setting4"
의 값으로 int
타입 32를 반환합니다.
키 경로 (key path)¶
FoxConfigurationAppSettings
클래스는 하위 객체를 갖는 복잡한 설정에 접근할 수 있도록 키 경로 사용이 가능합니다. 예를 들어 다음과 같은 설정이 있을 때,
"subkey1"
에 접근하기 위해서는 "complex:subkey1"
을 키 값으로 사용하면 됩니다. 키 경로는 인덱서(this
)와 GetValue<T>
메서드에 모두 적용할 수 있습니다.
배열에 대해서도 키 경로를 적용할 수 있습니다. 배열의 인덱스 값를 서브 키로 사용하여 배열 요소(element)를 읽을 수 있습니다.
객체 값을 갖는
"complex"
키, 혹은 배열 값을 갖는"array"
키에 대해 에 대해 인덱서(this
)를 사용하는 경우 빈 문자열(empty string)을 반환하며,GetValue<T>
메서드르 사용하는 경우default(T)
값이 반환됩니다.
"appSettings"
구성 설정 바인딩¶
FoxConfigurationSettings
클래스는 하위 객체 타입의 값을 .net 타입에 바인딩 하여 반환하는 Get<T>
메서드를 제공합니다. Get<T>
메서드를 사용하여 복잡한 설정 값을 간단하게 읽을 수 있습니다.
앞서 예를 들었던 "complex"
설정은 다음 클래스에 바인딩 할 수 있습니다.
바인딩 시 주의할 점은 JSON 역직렬화와는 다른 방식으로 JSON 설정을 닷넷 클래스에 바인딩 한다는 점입니다. 예를 들어 속성의 이름과 키 이름은 대소문자를 구별하지 않으며 JsonPropertyName 과 같은 특성이 효과가 없습니다.
ComplexSetting
클래스에 대해 Get<T>
메서드를 사용하여 다음과 같이 설정 값을 읽을 수 있습니다.
배열이나 리스트(
List<T>
) 혹은 여러 단계에 걸쳐 하위 객체를 갖는 경우에도Get<T>
메서드를 통해 바인딩이 가능합니다. 역직렬화와 비슷한 방식으로 바인딩이 가능하지만 앞서 언급한 것처럼 JSON 역직열화와 동일하지 않습니다.
JSON 배열의 경우 직관적으로 바인딩이 가능합니다. 즉, 배열값을 갖는 구성 설정은 List<T>
타입 혹은 T[]
타입으로 바인딩을 할 수 있습니다.
배열과 유사하게 키/값으로만 이루어진 단순한 JSON 객체는
Dictionary<string, string>
타입으로 바인딩이 가능합니다.
키 값 열거¶
마지막으로 FoxConfigurationAppSettings
클래스는 키 값에 대한 열거를 제공하는 IEnumerable<string>
인터페이스를 구현합니다. 따라서 다음과 같이 foreach
문을 사용하여 "appSettings"
섹션에 대한 모든 키/값을 표시할 수 있습니다.
위 코드는 다음과 같은 결과를 반환합니다. 열거 순서는 설정 순서와 무관하며 단순 키 뿐만 아니라 객체 값을 갖는 키와 그 하위 키들도 모두 열거된다는 점에 주의 하십시요.