Использование как Microsoft.Web.RedisSessionStateProvider, так и Microsoft.Web.RedisOutputCacheProvider - PullRequest
0 голосов
/ 02 июня 2018

Я установил и использовал Microsoft.Web.RedisSessionStateProvider некоторое время, и после просмотра OutputCaching я подумал об установке также Microsoft.Web.RedisOutputCacheProvider, но у них обоих есть интерфейс Microsoft.Web.Redis.ISerializer, который нарушает работу моего JsonCacheSerializer.использует интерфейс ISerializer.

В VS 2017 появляется сообщение об ошибке:

" Тип« ISerializer »существует как в Microsoft.Web.RedisOutputCacheProvider, так и в Microsoft.Web.RedisSessionStateProvider"

Код JsonCacheSerializer, который я использую для SessionState:

public class JsonCacheSerializer : Microsoft.Web.Redis.ISerializer
{
    private static readonly JsonSerializerSettings Settings = new JsonSerializerSettings()
    {
        TypeNameHandling = TypeNameHandling.All,
        ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
        PreserveReferencesHandling = PreserveReferencesHandling.Objects,
        Error = (serializer, err) => {
            err.ErrorContext.Handled = true;
        }
    };

    public byte[] Serialize(object data)
    {
        return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(data, Settings));
    }

    public object Deserialize(byte[] data)
    {
        return data == null ? null : JsonConvert.DeserializeObject(Encoding.UTF8.GetString(data), Settings);
    }
}

Значит ли это, что нужно использовать один или другой, а не оба?

1 Ответ

0 голосов
/ 14 февраля 2019

Вы можете использовать функцию внешнего псевдонима в C # https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/extern-alias

Пример Visual Studio: 1) щелкните правой кнопкой мыши Microsoft.Web.RedisOutputCacheProvider и введите в поле «Псевдонимы» следующее:

global,redisoutputcacheprovider

2) щелкните правой кнопкой мыши Microsoft.Web.RedisSessionStateProvider и введите в поле «Псевдонимы» следующее:

global,redissessionstateprovider

, затем в верхней части файла кода добавьте:

extern alias redissessionstateprovider;
extern alias redisoutputcacheprovider;

и, наконец, объявите свой класс как:

public class JsonCacheSessionStateSerializer : redissessionstateprovider::Microsoft.Web.Redis.ISerializer
...