2012-12-12 3 views
6

Ich schreibe eine benutzerdefinierte Bibliothek, die intern ServiceStack.Text verwendet. Andere Bibliotheken, die meine verwenden, können auch ServiceStack.Text verwenden.Ist es möglich, die Einstellungen von ServiceStack.Text.JsConfig auf Ihre Bibliothek zu beschränken?

Ich möchte einige JsConfig Optionen ändern (speziell Datumsverarbeitung), aber, wie jeder gute Bürger, möchte ich nicht, dass meine Änderungen dieser Werte Nebenwirkungen für meine Verbraucher verursachen.

Leider ist JsConfig eine statische Klasse, also sind die Einstellungen statisch und würden zu anderen Consumern von ServiceStack in derselben AppDomain bluten, glaube ich. Das ist ein unerwünschtes Verhalten.

Gibt es eine Möglichkeit, meine Konfigurationsänderungen nur auf meine Anrufe an die JsonSerializer zu beschränken?

aktualisieren

ich erkennen, gibt es die JsConfig.Reset Methode, leider, wenn der Anrufer bereits angepasst hat, die verloren gehen würden.

Ich könnte Werte speichern und wiederherstellen, aber ich müsste den Zugriff auf den Serializer synchronisieren, was auch den Zweck vereitelt.

Hoffentlich gibt es etwas einfaches, das ich vermisse?

Antwort

14

Diese Funktionalität fehlte in ServiceStack.Text, also habe ich eine pull request dafür hinzugefügt.

Grundsätzlich jetzt, wenn Sie Rahmen Ihrer Konfigurationseinstellungen wollten können Sie die folgende Syntax verwenden:

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

und die Werte werden nicht mehr eingestellt werden, sobald die Verwendung von Block den Gültigkeitsbereich verlässt, seine ThreadStatic auch so wirkt sich nicht auf andere Threads aus.

1

Eine Möglichkeit, die ich habe, ist nur mit einem benutzerdefinierten Typ intern zu meiner Bibliothek als das Stammobjekt zu serialisieren, und dann die JsConfig Werte speziell dafür angeben.

internal class MyInternalObject { } 

JsConfig<MyInternalObject>.DateHandler = ... 

Ich bin mir nicht sicher, ob die Wurzel Konfigurationswerte auf untergeordnete Objekte in der Serialisierung propagieren nach unten, aber leicht genug, um zu testen.

+3

Leider ist 'DateHandler' nicht auf der generischen Version dieses Typs, so wird dies nicht funktionieren. –

Verwandte Themen