using EnvelopeGenerator.Application.Contracts.Repositories; using EnvelopeGenerator.Infrastructure.Repositories; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.EntityFrameworkCore; namespace EnvelopeGenerator.Infrastructure; public static class DIExtensions { /// /// Registers the required repositories for the Envelope Generator service to the given . /// This method adds the repositories for various envelope-related entities, such as configuration, document receivers, envelopes, and users, /// as scoped services to the dependency injection container. Optionally, it can also configure the /// with the provided database context options if specified. /// /// The to which the services are added. /// An optional action to configure the for the . /// If not provided, the will not be configured. /// The updated with the added repository services. /// /// This method ensures that the repositories are registered as scoped services, meaning that a new instance of each repository /// will be created per HTTP request (or per scope) within the dependency injection container. /// public static IServiceCollection AddEnvelopeGeneratorRepositories(this IServiceCollection services, Action? dbContextOptions = null) { if(dbContextOptions is not null) services.AddDbContext(dbContextOptions); services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); return services; } }