2012-12-12 98 views
6

我在寫內部使用ServiceStack.Text的自定義庫。其他使用我的庫也可能使用ServiceStack.Text。是否可以將ServiceStack.Text.JsConfig設置範圍僅限於您的庫?

我想更改一些JsConfig選項(特別是日期處理),但是,與任何優秀的公民一樣,我不希望對這些值進行修改以引起消費者的副作用。

不幸的是JsConfig是一個靜態類,所以它的設置是靜態的,並且會在相同的AppDomain中泄漏給ServiceStack的其他使用者。這是一種不受歡迎的行爲。

有什麼方法可以將我的配置更改的範圍限制爲僅撥打JsonSerializer

更新

我不知道有該JsConfig.Reset方法,不幸的是,如果主叫方已定製它,那將會丟失。

我可以保存值並恢復它們,但是我必須同步對序列化程序的訪問,這也違背了目的。

希望有一些簡單的我失蹤?

回答

14

此功能在ServiceStack.Text中丟失,所以我爲其添加了一個pull request

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

,值將不再設置後的使用塊超出範圍,其ThreadStatic還有這樣:

基本上現在如果你想範圍的配置設置,您可以使用以下語法

不會影響其他線程。

1

我經歷過的一種可能性就是使用我的庫內部的自定義類型作爲要序列化的根對象,然後專門爲此指定JsConfig值。

internal class MyInternalObject { } 

JsConfig<MyInternalObject>.DateHandler = ... 

我不確定根配置值是否傳播到序列化中的子對象,但很容易測試。

+3

不幸的是'DateHandler'不在這種類型的通用版本上,所以這不起作用。 –

相關問題