using Microsoft.Extensions.DependencyInjection; using Modules.Rating.Api.Database; using Modules.Rating.Api.Repositories; using MongoDB.Driver; namespace Modules.Rating.Api { public static class ServiceCollectionExtensions { public static IServiceCollection AddRates(this IServiceCollection services, string connectionString) { AddMongoDb(services, connectionString); services.AddScoped(q => { var context = new MongoDbContext(q.GetRequiredService()); context.Initialize(); return context; }); AddRepositories(services); return services; } public static IServiceCollection AddRates(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(); } 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)); } } }