public static IServiceCollection AddDapperCachingInPartitionRedis <TCacheKeyBuilder>(this IServiceCollection service, PartitionRedisConfiguration config) where TCacheKeyBuilder : ICacheKeyBuilder { if (config == null) { throw new ArgumentNullException(nameof(config)); } if (config.Connections.Count() < 2) { throw new ArgumentException("Need at least 2 redis nodes.", nameof(config.Connections)); } service.AddSingleton(typeof(ICacheKeyBuilder), typeof(TCacheKeyBuilder)); service.AddSingleton(new CacheConfiguration { AllMethodsEnableCache = config.AllMethodsEnableCache, Expire = config.Expire }); RedisHelper.Initialization(config.PartitionPolicy != null ? new CSRedisClient(key => config.PartitionPolicy(key, config.Connections.ToArray()), config.Connections.ToArray()) : new CSRedisClient(null, config.Connections.ToArray())); service.AddSingleton <IDistributedCache>(new CSRedisCache(RedisHelper.Instance)); service.AddSingleton <ICacheProvider, PartitionRedisCacheProvider>(); service.AddSingleton <IDataSerializer, DataSerializer>(); return(service); }
public static ContainerBuilder AddDapperCachingInPartitionRedis(this ContainerBuilder service, PartitionRedisConfiguration config) { if (config == null) { throw new ArgumentNullException(nameof(config)); } if (config.Connections.Count() < 2) { throw new ArgumentException("Need at least 2 redis nodes.", nameof(config.Connections)); } service.RegisterType <DefaultCacheKeyBuilder>().As <ICacheKeyBuilder>().SingleInstance(); service.RegisterInstance(new CacheConfiguration { AllMethodsEnableCache = config.AllMethodsEnableCache, Expire = config.Expire }).SingleInstance(); RedisHelper.Initialization(config.PartitionPolicy != null ? new CSRedisClient(key => config.PartitionPolicy(key, config.Connections.ToArray()), config.Connections.ToArray()) : new CSRedisClient(null, config.Connections.ToArray())); service.RegisterInstance(new CSRedisCache(RedisHelper.Instance)).As <IDistributedCache>().SingleInstance(); service.RegisterType <PartitionRedisCacheProvider>().As <ICacheProvider>().SingleInstance(); service.RegisterType <DataSerializer>().As <IDataSerializer>().SingleInstance(); return(service); }