MyBookmark/Modules.Library.Database/ServiceCollectionExtensions.cs
2024-09-23 03:00:50 +03:00

69 lines
2.7 KiB
C#

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<MongoDbContext>(q =>
{
var context = new MongoDbContext(q.GetRequiredService<IMongoDatabase>());
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<MongoDbContext>();
services.AddScoped<MongoDbContext>(q =>
{
var context = new MongoDbContext(q.GetRequiredService<IMongoDatabase>());
context.Initialize();
return context;
});
AddRepositories(services);
AddGateways(services);
return services;
}
private static void AddRepositories(IServiceCollection services)
{
services.AddScoped<AnimeTitleRepository>();
services.AddScoped<GenreRepository>();
services.AddScoped<LanguageRepository>();
services.AddScoped<MediaInfoRepository>();
}
private static void AddGateways(IServiceCollection services)
{
services.AddScoped<IAnimeTitleGateway, AnimeTitleGateway>();
services.AddScoped<IGenreGateway, GenreGateway>();
services.AddScoped<ILanguageGateway, LanguageGateway>();
//services.AddScoped<IMediaInfoGateway, MediaInfoGateway>();
}
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));
}
}