DependencyInjection.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using Application.Abstractions.Data;
  2. using Infrastructure.Persistence;
  3. using Microsoft.AspNetCore.DataProtection;
  4. using Microsoft.EntityFrameworkCore;
  5. using Microsoft.Extensions.Configuration;
  6. using Microsoft.Extensions.DependencyInjection;
  7. using SharedKernel;
  8. using StackExchange.Redis;
  9. namespace Infrastructure
  10. {
  11. public static class DependencyInjection
  12. {
  13. public static IServiceCollection AddAdminInfrastructure(this IServiceCollection services, IConfiguration configuration)
  14. {
  15. return services.AddDatabase(configuration).AddRedis(configuration).AddServices().AddHealthChecks(configuration);
  16. }
  17. // SQL 연결
  18. private static IServiceCollection AddDatabase(this IServiceCollection services, IConfiguration configuration)
  19. {
  20. var dbConn = configuration.GetConnectionString("DefaultConnection");
  21. if (string.IsNullOrWhiteSpace(dbConn))
  22. {
  23. throw new InvalidOperationException("Connection string 'DefaultConnection' is not configured.");
  24. }
  25. services.AddDbContext<AppDbContext>(options => options.UseSqlServer(dbConn));
  26. services.AddScoped<IAppDbContext>(sp => sp.GetRequiredService<AppDbContext>());
  27. services.AddDbContext<IdentityDbContext>(options => options.UseSqlServer(dbConn));
  28. return services;
  29. }
  30. // Redis 연결
  31. public static IServiceCollection AddRedis(this IServiceCollection services, IConfiguration configuration)
  32. {
  33. var settings = configuration.Get<AppSettings>();
  34. var redis = ConnectionMultiplexer.Connect(settings.Redis.DefaultConnection);
  35. services.AddSingleton<IConnectionMultiplexer>(redis);
  36. services.AddDataProtection().SetApplicationName(settings.App.Name).PersistKeysToStackExchangeRedis(redis, settings.Redis.DataProtectionKey).SetDefaultKeyLifetime(settings.Redis.DefaultKeyLifetime); // 기본 90일 회전
  37. // Distributed Cache 설정
  38. services.AddStackExchangeRedisCache(options =>
  39. {
  40. options.Configuration = settings.Redis.DefaultConnection;
  41. options.InstanceName = settings.Redis.CachePrefix;
  42. });
  43. return services;
  44. }
  45. private static IServiceCollection AddServices(this IServiceCollection services)
  46. {
  47. return services;
  48. }
  49. private static IServiceCollection AddHealthChecks(this IServiceCollection services, IConfiguration configuration)
  50. {
  51. var settings = configuration.Get<AppSettings>()!;
  52. services.AddHealthChecks().AddSqlServer(settings.ConnectionStrings.DefaultConnection).AddRedis(settings.Redis.DefaultConnection);
  53. return services;
  54. }
  55. }
  56. }