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; }