2012-12-12 10 views
6

Piszę niestandardową bibliotekę, która wewnętrznie używa ServiceStack.Text. Inne biblioteki, które pobierają moje, mogą również używać ServiceStack.Text.Czy można zakres ustawień ServiceStack.Text.JsConfig tylko do swojej biblioteki?

Chcę zmienić niektóre opcje JsConfig (w szczególności obsługa daty), ale, jak każdy dobry obywatel, nie chcę, aby moje modyfikacje tych wartości wywoływały skutki uboczne dla mojego konsumenta.

Niestety, JsConfig jest klasą statyczną, więc jej ustawienia są statyczne i będą krwawić do innych użytkowników usługi ServiceStack w tym samym przekonaniu AppDomain. To niepożądane zachowanie.

Czy istnieje jakiś sposób, aby zmienić moje zmiany w konfiguracji tylko do moich połączeń z numerem JsonSerializer?

Aktualizacja

Zdaję sobie sprawę, że jest to metoda JsConfig.Reset niestety jeśli rozmówca dostosować go już, że zostaną utracone.

Mogłabym zapisać wartości i je przywrócić, ale musiałabym zsynchronizować dostęp do serializera, co również w pewnym stopniu pokonuje cel.

Mam nadzieję, że jest coś prostego, czego mi brakuje?

Odpowiedz

14

Ta funkcja nie istniała w ServiceStack.Text, więc dodałem do niej pull request.

Zasadniczo teraz jeśli chciał zakres ustawienia konfiguracyjne można użyć następującej składni:

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

i wartości nie będą już ustawione po użyciu bloku wychodzi z zakresu, jego ThreadStatic jak dobrze więc nie wpłynie na inne wątki.

1

Jedną z możliwości, którą posiadam, jest użycie niestandardowego typu wewnętrznego w mojej bibliotece jako obiektu głównego do serializacji, a następnie określenie wartości specjalnie dla tego. JsConfig.

internal class MyInternalObject { } 

JsConfig<MyInternalObject>.DateHandler = ... 

Nie jestem pewien, czy wartości konfiguracji głównej propagują do obiektów podrzędnych w serializacji, ale łatwe do przetestowania.

+3

Niestety, 'DateHandler' nie jest w ogólnej wersji tego typu, więc to nie zadziała. –

Powiązane problemy