added redis setup extensions

master
Young 7 months ago
parent ee069bdda6
commit 4e7dd583be

@ -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<RedisOptions>();
if (redisOptions is null || !redisOptions.IsEnable)
{
return services;
}
services.AddSingleton<ConnectionMultiplexer>(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;
}
}

@ -24,7 +24,4 @@
<PackageReference Include="StackExchange.Redis" Version="2.8.16" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.8.1" />
</ItemGroup>
<ItemGroup>
<Folder Include="Extensions\" />
</ItemGroup>
</Project>

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

Loading…
Cancel
Save