Я пытаюсь создать поставщика Redis для Strathweb.CacheOutput.WebApi2, но попытка преобразования из byte[] -> RedisValue -> byte[] возвращает значение null.
Я могу вручную установить тип объекта как byte[] вместо var/RedisValue, и он будет правильно возвращать значение как byte[], но после того, как он был установлен как RedisValue, его невозможно преобразовать в byte[].
В его интерфейсе Get всегда возвращает объект, поэтому я не могу форсировать тип или использовать отдельный вызов без необходимости изменять интерфейс.
Если я попытаюсь сделать result as byte[]
, я получу Cannot convert type 'StackExchange.Redis.RedisValue' to 'byte[]' via a reference conversion, boxing conversion, unboxing conversion, wrapping conversion, or null type conversion
Если я попытаюсь сделать (byte[])result
, я получу Cannot cast 'result' (which has an actual type of 'StackExchange.Redis.RedisValue') to 'byte[]'
Есть ли что-то, что я упускаю, или мне придется как-то взломать это, проверив, какой тип данных он ищет на основе ключа?
Вот интерфейс:
namespace WebApi.OutputCache.Core.Cache
{
public interface IApiOutputCache
{
void RemoveStartsWith(string key);
T Get<T>(string key) where T : class;
object Get(string key);
void Remove(string key);
bool Contains(string key);
void Add(string key, object o, DateTimeOffset expiration, string dependsOnKey = null);
IEnumerable<string> AllKeys { get; }
}
}
А вот как это называется:
var val = _webApiCache.Get(cachekey) as byte[];
if (val == null) return;
Изменить: добавление примеров API, который я реализовал с использованием как ServiceStack.Redis v3 (работает банкомат, так как он просто использует object
и StackExchange.Redis, который не работает)
https://github.com/mackayj/WebApi.OutputCache.Redis.ServiceStack
https://github.com/mackayj/WebApi.OutputCache.Redis.StackExchange