2012-12-12 7 views
6

ServiceStack.Text을 내부적으로 사용하는 사용자 지정 라이브러리를 작성하고 있습니다. 광산을 사용하는 다른 라이브러리에서도 ServiceStack.Text를 사용할 수 있습니다.ServiceStack.Text.JsConfig 설정을 라이브러리에만 적용 할 수 있습니까?

어떤 좋은 시민과 마찬가지로 JsConfig 옵션을 변경하고 싶지만 그 값을 수정하면 내 소비자에게 부작용이 발생하기를 원하지 않습니다.

불행히도 JsConfig은 정적 클래스이므로 설정이 정적이며 믿을 수있는 동일한 AppDomain에서 다른 소비자의 ServiceStack에 피가 흘립니다. 그것은 바람직하지 않은 행동입니다.

JsonSerializer으로 전화를 걸어 구성을 변경하는 방법이 있습니까?

업데이트 손실 될 수

나는 JsConfig.Reset 방법은 호출자가 이미 정의했다 불행히도 경우,이 깨닫는다.

값을 저장하고 복원 할 수는 있지만 일종의 일종의 목적을 무력화하는 시리얼 라이저에 대한 액세스를 동기화해야합니다.

내가 누락 된 간단한 것이 있습니까?

답변

14

이 기능은 ServiceStack.Text에서 누락되어 있으므로 pull request을 추가했습니다. 은 Using 블록이 범위를 벗어나 그 ThreadStatic뿐만 아니라 그렇게하면

using(var config = JsConfig.BeginScope()) 
{ 
    config.DateHandler = ... 
} 

그리고 값이 더 이상 설정되지 않습니다 : 기본적으로 이제 범위를 원하는 당신의 구성 설정은 다음 구문을 사용할 수 있는지

다른 스레드에는 영향을주지 않습니다.

1

하나의 가능성 비록 내 컴퓨터의 내부 형식을 내부적으로 루트 개체로 사용하여 serialize 한 다음 해당 값을 구체적으로 지정하면 JsConfig 값이 지정됩니다.

internal class MyInternalObject { } 

JsConfig<MyInternalObject>.DateHandler = ... 

루트 구성 값이 직렬화에서 하위 개체로 전파되지만 테스트하기에 충분하지는 않습니다.

+3

불행히도 'DateHandler'는이 유형의 제네릭 버전에 없으므로 작동하지 않습니다. –

관련 문제