2012-12-12 49 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'不在这种类型的通用版本上,所以这不起作用。 –

相关问题