using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Ping.Application.Contracts; using Ping.Infrastructure.Configuration; namespace Ping.Infrastructure.Persistence { public static class DatabaseDependencyInjection { public static IServiceCollection AddDatabase(this IServiceCollection serviceDescriptors, IConfiguration configuration) { serviceDescriptors .AddOptionsWithValidateOnStart() .Bind(configuration.GetRequiredSection(DatabaseConfiguration.SectionName)) .ValidateDataAnnotations(); serviceDescriptors.AddSingleton(serviceProvider => serviceProvider.GetRequiredService>().Value); serviceDescriptors.AddSingleton(); serviceDescriptors.AddDbContext((serviceProvider, options) => options.AddInterceptors(serviceProvider.GetRequiredService())); serviceDescriptors.AddScoped(serviceProvider => serviceProvider.GetRequiredService()); return serviceDescriptors; } } }