server-master/srcs/PhoenixLib.DAL.Redis/DependencyInjectionExtensions.cs
2026-02-10 18:21:30 +01:00

69 lines
No EOL
2.7 KiB
C#

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}" }
});
/// <summary>
/// Register redis configuration from env
/// </summary>
/// <param name="services"></param>
public static void TryAddConfigurationFromEnv(this IServiceCollection services)
{
services.TryAddSingleton(s => RedisConfiguration.FromEnv());
}
/// <summary>
/// Registers the Connection Multiplexer
/// </summary>
/// <param name="services"></param>
internal static void TryAddConnectionMultiplexer(this IServiceCollection services)
{
services.TryAddSingleton(s => s.GetService<RedisConfiguration>().GetConnectionMultiplexer());
}
/// <summary>
/// Registers the Connection Multiplexer
/// </summary>
/// <param name="services"></param>
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<IConnectionMultiplexer>(),
Serializer = new JsonNetSerializer()
}));
services.TryAddSingleton<ICacheClient>(s => s.GetRequiredService<RedisCacheClient>());
}
/// <summary>
/// Registers a KeyValueStorage from Env
/// </summary>
/// <param name="services"></param>
/// <typeparam name="TObject"></typeparam>
/// <typeparam name="TKey"></typeparam>
public static void TryAddRedisKeyValueStorageFromEnv<TObject, TKey>(this IServiceCollection services)
{
services.TryAddConnectionMultiplexerFromEnv();
services.TryAddRedisCacheClient();
services.TryAddSingleton(typeof(IKeyValueAsyncStorage<,>), typeof(RedisGenericKeyValueAsyncStorage<,>));
}
}
}