using Application.Abstractions.Data; using Infrastructure.Persistence; using Microsoft.AspNetCore.DataProtection; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using SharedKernel; using StackExchange.Redis; namespace Infrastructure { public static class DependencyInjection { public static IServiceCollection AddAdminInfrastructure(this IServiceCollection services, IConfiguration configuration) { return services.AddDatabase(configuration).AddRedis(configuration).AddServices().AddHealthChecks(configuration); } // SQL ¿¬°á private static IServiceCollection AddDatabase(this IServiceCollection services, IConfiguration configuration) { var dbConn = configuration.GetConnectionString("DefaultConnection"); if (string.IsNullOrWhiteSpace(dbConn)) { throw new InvalidOperationException("Connection string 'DefaultConnection' is not configured."); } services.AddDbContext(options => options.UseSqlServer(dbConn)); services.AddScoped(sp => sp.GetRequiredService()); services.AddDbContext(options => options.UseSqlServer(dbConn)); return services; } // Redis ¿¬°á public static IServiceCollection AddRedis(this IServiceCollection services, IConfiguration configuration) { var settings = configuration.Get(); var redis = ConnectionMultiplexer.Connect(settings.Redis.DefaultConnection); services.AddSingleton(redis); services.AddDataProtection().SetApplicationName(settings.App.Name).PersistKeysToStackExchangeRedis(redis, settings.Redis.DataProtectionKey).SetDefaultKeyLifetime(settings.Redis.DefaultKeyLifetime); // ±âº» 90ÀÏ È¸Àü // Distributed Cache ¼³Á¤ services.AddStackExchangeRedisCache(options => { options.Configuration = settings.Redis.DefaultConnection; options.InstanceName = settings.Redis.CachePrefix; }); return services; } private static IServiceCollection AddServices(this IServiceCollection services) { return services; } private static IServiceCollection AddHealthChecks(this IServiceCollection services, IConfiguration configuration) { var settings = configuration.Get()!; services.AddHealthChecks().AddSqlServer(settings.ConnectionStrings.DefaultConnection).AddRedis(settings.Redis.DefaultConnection); return services; } } }