using Foundatio.Caching;
using Foundatio.Serializer;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using StackExchange.Redis;
namespace PhoenixLib.DAL.Redis
{
public static class DependencyInjectionExtensions
{
public static IConnectionMultiplexer GetConnectionMultiplexer(this RedisConfiguration redisConfiguration) =>
ConnectionMultiplexer.Connect(new ConfigurationOptions
{
Password = redisConfiguration.Password,
EndPoints = { $"{redisConfiguration.Host}:{redisConfiguration.Port}" }
});
///
/// Register redis configuration from env
///
///
public static void TryAddConfigurationFromEnv(this IServiceCollection services)
{
services.TryAddSingleton(s => RedisConfiguration.FromEnv());
}
///
/// Registers the Connection Multiplexer
///
///
internal static void TryAddConnectionMultiplexer(this IServiceCollection services)
{
services.TryAddSingleton(s => s.GetService().GetConnectionMultiplexer());
}
///
/// Registers the Connection Multiplexer
///
///
public static void TryAddConnectionMultiplexerFromEnv(this IServiceCollection services)
{
services.TryAddConfigurationFromEnv();
services.TryAddConnectionMultiplexer();
}
public static void TryAddRedisCacheClient(this IServiceCollection services)
{
services.TryAddSingleton(s => new RedisCacheClient(new RedisCacheClientOptions
{
ConnectionMultiplexer = s.GetRequiredService(),
Serializer = new JsonNetSerializer()
}));
services.TryAddSingleton(s => s.GetRequiredService());
}
///
/// Registers a KeyValueStorage from Env
///
///
///
///
public static void TryAddRedisKeyValueStorageFromEnv(this IServiceCollection services)
{
services.TryAddConnectionMultiplexerFromEnv();
services.TryAddRedisCacheClient();
services.TryAddSingleton(typeof(IKeyValueAsyncStorage<,>), typeof(RedisGenericKeyValueAsyncStorage<,>));
}
}
}