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

私が考えた 1 つの可能性は、シリアル化するルート オブジェクトとしてライブラリ内部のカスタム型を使用し、そのJsConfig値を具体的に指定することです。

internal class MyInternalObject { }

JsConfig<MyInternalObject>.DateHandler = ...

シリアル化でルート構成値が子オブジェクトに伝播するかどうかはわかりませんが、テストするのは簡単です。

于 2012-12-12T17:59:23.040 に答える