From 6347259a917c3f9145d0cc609b5666d11a6ffa42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AF=95=E6=AE=BF=E5=8D=BF?= Date: Sat, 20 Nov 2021 14:56:05 +0800 Subject: [PATCH] Add extension method AddCSRedisCache for IServiceCollection --- .../CSRedisCache.cs | 9 +++-- .../CSRedisCacheOptions.cs | 22 ++++++++++++ ...CSRedisCacheServiceCollectionExtensions.cs | 36 +++++++++++++++++++ ...icrosoft.Extensions.Caching.CSRedis.csproj | 4 +++ .../README.md | 4 ++- 5 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 src/Microsoft.Extensions.Caching.CSRedis/CSRedisCacheOptions.cs create mode 100644 src/Microsoft.Extensions.Caching.CSRedis/CSRedisCacheServiceCollectionExtensions.cs diff --git a/src/Microsoft.Extensions.Caching.CSRedis/CSRedisCache.cs b/src/Microsoft.Extensions.Caching.CSRedis/CSRedisCache.cs index e508030..061a92a 100644 --- a/src/Microsoft.Extensions.Caching.CSRedis/CSRedisCache.cs +++ b/src/Microsoft.Extensions.Caching.CSRedis/CSRedisCache.cs @@ -2,14 +2,19 @@ using System.Text; using System.Threading; using System.Threading.Tasks; +using Caching.CSRedis; using Microsoft.Extensions.Caching.Distributed; +using Microsoft.Extensions.Options; namespace Microsoft.Extensions.Caching.Redis { + /// + /// Distributed cache implementation using Redis. + /// public class CSRedisCache : IDistributedCache { private CSRedis.CSRedisClient _redisClient; - public CSRedisCache(CSRedis.CSRedisClient redisClient) { - _redisClient = redisClient; + public CSRedisCache(IOptions optionsAccessor) { + _redisClient = optionsAccessor.Value.CSRedisClient; } // KEYS[1] = = key // ARGV[1] = absolute-expiration - ticks as long (-1 for none) diff --git a/src/Microsoft.Extensions.Caching.CSRedis/CSRedisCacheOptions.cs b/src/Microsoft.Extensions.Caching.CSRedis/CSRedisCacheOptions.cs new file mode 100644 index 0000000..4ede628 --- /dev/null +++ b/src/Microsoft.Extensions.Caching.CSRedis/CSRedisCacheOptions.cs @@ -0,0 +1,22 @@ +using CSRedis; +using Microsoft.Extensions.Caching.Redis; +using Microsoft.Extensions.Options; + +namespace Caching.CSRedis +{ + /// + /// Configuration options for . + /// + public class CSRedisCacheOptions : IOptions + { + /// + /// Redis Client + /// + public CSRedisClient CSRedisClient { get; set; } + + CSRedisCacheOptions IOptions.Value + { + get { return this; } + } + } +} diff --git a/src/Microsoft.Extensions.Caching.CSRedis/CSRedisCacheServiceCollectionExtensions.cs b/src/Microsoft.Extensions.Caching.CSRedis/CSRedisCacheServiceCollectionExtensions.cs new file mode 100644 index 0000000..4391092 --- /dev/null +++ b/src/Microsoft.Extensions.Caching.CSRedis/CSRedisCacheServiceCollectionExtensions.cs @@ -0,0 +1,36 @@ +using Caching.CSRedis; +using Microsoft.Extensions.Caching.Distributed; +using Microsoft.Extensions.Caching.Redis; +using System; + +namespace Microsoft.Extensions.DependencyInjection +{ + public static class CSRedisCacheServiceCollectionExtensions + { + /// + /// Adds Redis distributed caching services to the specified . + /// + /// The to add services to. + /// An to configure the provided + /// . + /// The so that additional calls can be chained. + public static IServiceCollection AddCSRedisCache(this IServiceCollection services, Action setupAction) + { + if (services == null) + { + throw new ArgumentNullException(nameof(services)); + } + + if (setupAction == null) + { + throw new ArgumentNullException(nameof(setupAction)); + } + + services.AddOptions(); + services.Configure(setupAction); + services.Add(ServiceDescriptor.Singleton()); + + return services; + } + } +} diff --git a/src/Microsoft.Extensions.Caching.CSRedis/Microsoft.Extensions.Caching.CSRedis.csproj b/src/Microsoft.Extensions.Caching.CSRedis/Microsoft.Extensions.Caching.CSRedis.csproj index 470979b..838bc8c 100644 --- a/src/Microsoft.Extensions.Caching.CSRedis/Microsoft.Extensions.Caching.CSRedis.csproj +++ b/src/Microsoft.Extensions.Caching.CSRedis/Microsoft.Extensions.Caching.CSRedis.csproj @@ -30,6 +30,10 @@ + + + + diff --git a/src/Microsoft.Extensions.Caching.CSRedis/README.md b/src/Microsoft.Extensions.Caching.CSRedis/README.md index 5119990..f865dfb 100644 --- a/src/Microsoft.Extensions.Caching.CSRedis/README.md +++ b/src/Microsoft.Extensions.Caching.CSRedis/README.md @@ -13,7 +13,9 @@ ```csharp var csredis = new CSRedis.CSRedisClient("127.0.0.1:6379,password=123,defaultDatabase=13,ssl=false,writeBuffer=10240,poolsize=50,prefix=key前辍"); -services.AddSingleton(new Microsoft.Extensions.Caching.Redis.CSRedisCache(csredis)); +services.AddCSRedisCache(options => { + options.CSRedisClient = csredis; +}); ``` # 集群模式