using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System.Linq; using WIDESEAWCS_Core.Caches; using WIDESEAWCS_RedisService.Bitmap; using WIDESEAWCS_RedisService.Cache; using WIDESEAWCS_RedisService.Configuration; using WIDESEAWCS_RedisService.Connection; using WIDESEAWCS_RedisService.Counter; using WIDESEAWCS_RedisService.DelayQueue; using WIDESEAWCS_RedisService.IdGenerator; using WIDESEAWCS_RedisService.Leaderboard; using WIDESEAWCS_RedisService.Geo; using WIDESEAWCS_RedisService.Lock; using WIDESEAWCS_RedisService.Monitoring; using WIDESEAWCS_RedisService.Options; using WIDESEAWCS_RedisService.PubSub; using WIDESEAWCS_RedisService.RateLimiting; using WIDESEAWCS_RedisService.Serialization; using WIDESEAWCS_RedisService.Session; using WIDESEAWCS_RedisService.Storage; using WIDESEAWCS_RedisService.Stream; namespace WIDESEAWCS_RedisService.Extensions { public static class RedisServiceSetup { public static IServiceCollection AddRedisSetup(this IServiceCollection services, IConfiguration configuration) { var section = configuration.GetSection("RedisConfig"); services.Configure(section); var options = section.Get() ?? new RedisOptions(); if (!options.Enabled) { // Redis未启用,使用内存缓存 services.AddMemoryCache(); return services; } // 移除已有的ICacheService注册(MemoryCacheService),避免冲突 var existingDescriptor = services.FirstOrDefault(d => d.ServiceType == typeof(ICacheService)); if (existingDescriptor != null) { services.Remove(existingDescriptor); } // 基础设施 services.AddMemoryCache(); services.AddSingleton(); services.AddSingleton(); // 缓存(替换原有MemoryCacheService) services.AddSingleton(); // 功能模块 services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); return services; } } }