From 4e7dd583be60a14dcaa94e26b20d81583d8d7bf5 Mon Sep 17 00:00:00 2001 From: Young Date: Wed, 2 Oct 2024 22:38:49 +0800 Subject: [PATCH] added redis setup extensions --- src/Infrastructure/Extensions/RedisSetup.cs | 36 +++++++++++++++++++++ src/Infrastructure/Infrastructure.csproj | 3 -- src/Infrastructure/Options/RedisOptions.cs | 2 +- 3 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 src/Infrastructure/Extensions/RedisSetup.cs diff --git a/src/Infrastructure/Extensions/RedisSetup.cs b/src/Infrastructure/Extensions/RedisSetup.cs new file mode 100644 index 0000000..a9a5d27 --- /dev/null +++ b/src/Infrastructure/Extensions/RedisSetup.cs @@ -0,0 +1,36 @@ +using Infrastructure.Options; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using StackExchange.Redis; + +namespace Infrastructure.Extensions; + +public static class RedisSetup +{ + public static IServiceCollection AddRedisSetup(this IServiceCollection services, IConfiguration configuration) + { + ArgumentNullException.ThrowIfNull(services); + ArgumentNullException.ThrowIfNull(configuration); + var redisOptions = configuration.GetSection(RedisOptions.Name).Get(); + if (redisOptions is null || !redisOptions.IsEnable) + { + return services; + } + + services.AddSingleton(provider => + { + var host = configuration["REDIS_HOST"] ?? redisOptions.Host; + ArgumentException.ThrowIfNullOrEmpty(host); + var password = configuration["REDIS_PASSWORD"] ?? redisOptions.Password; + ArgumentException.ThrowIfNullOrEmpty(password); + var serviceName = configuration["REDIS_SERVICE_NAME"] ?? redisOptions.SeriveName; + var connectionString = string.IsNullOrEmpty(serviceName) + ? $"{host},password={password}" + : $"{host},password={password},serviceName={serviceName}"; + var redisConfig = ConfigurationOptions.Parse(connectionString, true); + redisConfig.ResolveDns = true; + return ConnectionMultiplexer.Connect(redisConfig); + }); + return services; + } +} \ No newline at end of file diff --git a/src/Infrastructure/Infrastructure.csproj b/src/Infrastructure/Infrastructure.csproj index aab82f7..adffd58 100644 --- a/src/Infrastructure/Infrastructure.csproj +++ b/src/Infrastructure/Infrastructure.csproj @@ -24,7 +24,4 @@ - - - diff --git a/src/Infrastructure/Options/RedisOptions.cs b/src/Infrastructure/Options/RedisOptions.cs index ff275e9..3f4d787 100644 --- a/src/Infrastructure/Options/RedisOptions.cs +++ b/src/Infrastructure/Options/RedisOptions.cs @@ -4,7 +4,7 @@ public sealed class RedisOptions : OptionsBase { public const string Name = "Redis"; - public string InstanceName { get; set; } + public string SeriveName { get; set; } public string Host { get; set; }