using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Npgsql; using Tiku.Application.Assets; using Tiku.Application.Auth; using Tiku.Application.Catalog; using Tiku.Application.Commerce; using Tiku.Application.Content; using Tiku.Application.Learning; using Tiku.Application.QuestionBanks; using Tiku.Application.Profile; using Tiku.Application.Scoreline; using Tiku.Application.Storage; using Tiku.Application.StudyContent; using Tiku.Application.TenantAdmin; using Tiku.Infrastructure.Assets; using Tiku.Infrastructure.Auth; using Tiku.Infrastructure.Catalog; using Tiku.Infrastructure.Commerce; using Tiku.Infrastructure.Content; using Tiku.Infrastructure.Learning; using Tiku.Infrastructure.Persistence; using Tiku.Infrastructure.Profile; using Tiku.Infrastructure.QuestionBanks; using Tiku.Infrastructure.Scoreline; using Tiku.Infrastructure.Storage; using Tiku.Infrastructure.StudyContent; using Tiku.Infrastructure.TenantAdmin; namespace Tiku.Infrastructure; public static class DependencyInjection { public static IServiceCollection AddInfrastructure( this IServiceCollection services, string connectionString) { ArgumentException.ThrowIfNullOrWhiteSpace(connectionString); services.AddSingleton(_ => NpgsqlDataSource.Create(connectionString)); services.AddDbContextPool((serviceProvider, options) => { var dataSource = serviceProvider.GetRequiredService(); options.UseNpgsql(dataSource, npgsql => npgsql.MigrationsAssembly(typeof(TikuDbContext).Assembly.FullName)); }); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddOptions() .Validate( AliyunOssOptions.BeValid, "Aliyun OSS presign default expiration must be positive."); services.AddOptions() .Validate( ObjectStorageOptions.BeValid, "Storage options must include a default provider, default bucket and positive max upload bytes."); services.AddSingleton(); return services; } }