Как я могу использовать NodaTime с Redis?C#

Место общения программистов C#
Ответить
Anonymous
 Как я могу использовать NodaTime с Redis?

Сообщение Anonymous »

Я использую реализацию HybridCahce из .net 9 с экземпляром DragonFly в качестве распределенного кэша и работает должным образом с:

Код: Выделить всё

builder.Services.AddStackExchangeRedisCache(options => options.Configuration = redisConnectionString);
..
builder.Services.AddHybridCache(options => options.ReportTagMetrics = true);
Однако, когда я пытаюсь кэшировать что-то, что содержит Instant NodaTime, это свойство в хранилище пусто.
Изображение

В общем, чтобы использовать NodaTime, его нужно добавить в сериализатор.
Работает с MassTransit и RabbitMQ при следующей настройке:

Код: Выделить всё

x.UsingRabbitMq((context, cfg) =>
{
...
cfg.ConfigureJsonSerializerOptions(j => j.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb));
...
});
Но как я могу добиться того же с кешем?
Я реализовал IHybridCacheSerializer и зарегистрировался в контейнере DI, но он никогда не вызывается. .AddSerializer — это просто оболочка .AddSingleton, поэтому он делает то же самое: ничего.
Основываясь на стандартной реализации AddHybridCache, у меня есть переопределил IHybridCacheSerializerFactory, чтобы попытаться разрешить определенные сериализаторы, но это не имеет значения, эта служба также никогда не разрешается.
Единственное обходное решение, которое я нашел, — это добавление сериализаторов NodaTime к преобразователю по умолчанию. список с использованием отражения. Но это огромный трюк: как глобально установить параметры по умолчанию для System.Text.Json.JsonSerializer?
[Обновление]
Основываясь на разъяснениях Марка Гравела, я переопределил стандартную фабрику IHybridCacheSerializerFactory, чтобы использовать собственный экземпляр JsonSerializerOptions. Это абсолютно приемлемое решение.

Подробнее здесь: https://stackoverflow.com/questions/790 ... with-redis
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»