using Microsoft.Extensions.DependencyInjection; using Modules.Library.Application.Gateways; using Modules.Library.Database.Database; using Modules.Library.Database.GatewaysImplementations; using Modules.Library.Database.Repositories; using MongoDB.Driver; namespace Modules.Library.Database; public static class ServiceCollectionExtensions { public static IServiceCollection AddDatabase(this IServiceCollection services, string connectionString) { AddMongoDb(services, connectionString); services.AddScoped(q => { var context = new MongoDbContext(q.GetRequiredService()); context.Initialize(); return context; }); AddRepositories(services); AddGateways(services); return services; } public static IServiceCollection AddDatabase(this IServiceCollection services, string connectionString, string? databaseName) { AddMongoDb(services, connectionString, databaseName); //services.AddScoped(); services.AddScoped(q => { var context = new MongoDbContext(q.GetRequiredService()); context.Initialize(); return context; }); AddRepositories(services); AddGateways(services); return services; } private static void AddRepositories(IServiceCollection services) { services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); } private static void AddGateways(IServiceCollection services) { services.AddScoped(); services.AddScoped(); services.AddScoped(); //services.AddScoped(); } private static void AddMongoDb(this IServiceCollection services, string? connectionString) { if (string.IsNullOrWhiteSpace(connectionString)) throw new ArgumentNullException(nameof(connectionString)); services.AddSingleton(new MongoClient(connectionString)); } private static void AddMongoDb(IServiceCollection services, string? connectionString, string? databaseName) { if (string.IsNullOrWhiteSpace(connectionString)) throw new ArgumentNullException(nameof(connectionString)); if (string.IsNullOrWhiteSpace(databaseName)) throw new ArgumentNullException(nameof(databaseName)); services.AddSingleton(new MongoClient(connectionString).GetDatabase(databaseName)); } }