MyBookmark/Modules.Rating.Api/ServiceCollectionExtensions.cs
2024-10-21 01:52:41 +03:00

60 lines
2.2 KiB
C#

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<IMongoDatabase>());
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<MongoDbContext>();
services.AddScoped(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<RateRepository>();
}
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));
}
}
}