6

我正在编写一个在内部使用ServiceStack.Text的自定义库。其他使用我的库也可能使用 ServiceStack.Text。

我想更改一些JsConfig选项(特别是日期处理),但是,像任何好公民一样,我不希望我对这些值的修改对我的消费者造成副作用。

不幸JsConfig的是,它是一个静态类,所以它的设置是静态的,并且我相信会在同一个 AppDomain 中流向 ServiceStack 的其他消费者。这是不受欢迎的行为。

有什么方法可以将我的配置更改范围仅限于我对JsonSerializer?

更新

我确实意识到有这种JsConfig.Reset方法,不幸的是,如果调用者已经定制了它,那将会丢失。

我可以保存值并恢复它们,但我必须同步对序列化程序的访问,这也有点违背了目的。

希望我缺少一些简单的东西?

4

2 回答 2

14

ServiceStack.Text 中缺少此功能,因此我为其添加了拉取请求

基本上现在,如果您想确定配置设置的范围,您可以使用以下语法:

using(var config = JsConfig.With(new Config { DateHandler = ... }))
{
}

一旦 using 块超出范围,将不再设置这些值,它ThreadStatic也不会影响其他线程。

于 2012-12-12T21:41:47.990 回答
1

我想到的一种可能性是仅使用库内部的自定义类型作为要序列化的根对象,然后JsConfig专门为此指定值。

internal class MyInternalObject { }

JsConfig<MyInternalObject>.DateHandler = ...

我不确定根配置值是否会向下传播到序列化中的子对象,但很容易测试。

于 2012-12-12T17:59:23.040 回答