using DigitalData.TaskFlow.Application.Common.Interfaces; using DigitalData.TaskFlow.Infrastructure.Options; using DigitalData.TaskFlow.Infrastructure.Persistence; using DigitalData.TaskFlow.Infrastructure.Repositories; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace DigitalData.TaskFlow.Infrastructure; public static class DependencyInjection { public static IServiceCollection AddInfrastructureServices(this IServiceCollection services, IConfiguration configuration) { var connectionString = configuration.GetConnectionString("TaskFlowDb"); var databaseOptions = configuration.GetSection(DatabaseOptions.SectionName).Get() ?? new DatabaseOptions(); if (string.IsNullOrWhiteSpace(connectionString)) { throw new InvalidOperationException("Connection string 'TaskFlowDb' is not configured."); } services.AddDbContext(options => { options.UseSqlServer(connectionString, sqlOptions => { sqlOptions.CommandTimeout(databaseOptions.CommandTimeoutSeconds); }); }); services.Configure(configuration.GetSection(DatabaseOptions.SectionName)); services.AddScoped(); services.AddScoped(); return services; } }