В документации StackExchange.Redis рекомендуется только создайте его и повторно используйте подключение к Redis.
В передовых практиках Azure Redis рекомендуется использовать следующий шаблон:
private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{
return ConnectionMultiplexer.Connect("cachename.redis.cache.windows.net,ssl=true,abortConnect=false,password=password");
});
public static ConnectionMultiplexer Connection
{
get
{
return lazyConnection.Value;
}
}
но как мне заставить это работать с Autofac, где я хочу, чтобы конфигурация была установлена в файлах конфигурации веб / приложения?
В настоящее время у меня есть RedisCacheProvider:
private readonly ConnectionMultiplexer _connection;
public RedisCacheProvider(string config)
{
_connection = ConnectionMultiplexer.Connect(config);
}
и в моей конфигурации Autofac:
builder.RegisterType<RedisCacheProvider>().As<ICacheProvider>().WithParameter("config", "localhost");
Я думаю, я должен изменить свой RedisCacheProvider, чтобы он принимал ConnectionMultiplexer, который передается через статическую переменную?
Обновление: мое решение на данный момент:
Мой RedisCacheProvider (введение интерфейса позволяет мне имитировать соединение в модульных тестах):
private readonly IConnectionMultiplexer _connection;
public RedisCacheProvider(IConnectionMultiplexer connection)
{
_connection = connection;
}
Класс RedisConnection для хранения статического свойства и чтения конфигурации из файла конфигурации:
public class RedisConnection
{
private static readonly Lazy<ConnectionMultiplexer> LazyConnection =
new Lazy<ConnectionMultiplexer>(
() => ConnectionMultiplexer.Connect(ConfigurationManager.AppSettings["RedisCache"]));
public static ConnectionMultiplexer Connection
{
get
{
return LazyConnection.Value;
}
}
}
Регистрация в модуле Autofac:
builder.RegisterType<RedisCacheProvider>().As<ICacheProvider>()
.WithParameter(new TypedParameter(
typeof(IConnectionMultiplexer),
RedisConnection.Connection));