using Microsoft.Extensions.DependencyInjection; using Modules.User.Application.Gateways; using Modules.User.Database.Database; using Modules.User.Database.GatewaysImplementations; using Modules.User.Database.Repositories; using Microsoft.EntityFrameworkCore; using System.Reflection; namespace Modules.User.Database; public static class ServiceCollectionExtensions { public static IServiceCollection AddDatabase(this IServiceCollection services, string? connectionString) { if (string.IsNullOrWhiteSpace(connectionString)) throw new ArgumentNullException(nameof(connectionString)); services.AddDbContext(options => { options.UseNpgsql(connectionString, q => { q.MigrationsAssembly(Assembly.GetAssembly(typeof(UserDbContext))!.GetName().Name); q.MigrationsHistoryTable("__Migrations"); }); //options.UseNpgsql(connectionString); //AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true); //Включаем UTC-время. //options.UseLazyLoadingProxies(); // lazy loading }); 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 UserDbContext(q.GetRequiredService()); // context.Initialize(); // return context; // }); // BsonSerializer.RegisterSerializer(new GuidSerializer(GuidRepresentation.Standard)); // BsonSerializer.RegisterSerializer(new NullableSerializer(new GuidSerializer(GuidRepresentation.Standard))); // AddRepositories(services); // AddGateways(services); // return services; //} private static void AddRepositories(IServiceCollection services) { services.AddScoped(); services.AddScoped(); services.AddScoped(); } private static void AddGateways(IServiceCollection services) { 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)); //} }