我正在编写一个内部使用ServiceStack.Text的自定义库。使用我的其他库也可以使用ServiceStack.Text。
我想更改一些JsConfig
选项(特别是日期处理),但是,像任何好公民一样,我不希望我对这些值的修改会对我的消费者造成副作用。
不幸的是JsConfig
是一个静态类,所以它的设置是静态的,并且会在同一个AppDomain中流向ServiceStack的其他消费者。这是一种不受欢迎的行为。
是否有某种方法可以将我的配置更改范围扩展到我对JsonSerializer
的调用?
更新
我确实知道有JsConfig.Reset
方法,不幸的是如果调用者已经对其进行了定制,那么这种方法就会丢失。
我可以保存值并恢复它们,但是我必须同步对序列化程序的访问,这也会破坏目的。
希望有一些简单的东西我不见了?
答案 0 :(得分:14)
ServiceStack.Text中缺少此功能,因此我为其添加了pull request。
现在基本上,如果您想要调整配置设置的范围,可以使用以下语法:
using(var config = JsConfig.With(new Config { DateHandler = ... }))
{
}
一旦使用块超出范围,将不再设置值,其ThreadStatic
也不会影响其他线程。
答案 1 :(得分:1)
我可能的一种可能性就是使用我的库内部的自定义类型作为序列化的根对象,然后专门为此指定JsConfig
值。
internal class MyInternalObject { }
JsConfig<MyInternalObject>.DateHandler = ...
我不确定根配置值是否传播到序列化中的子对象,但是很容易测试。