Add project files.
This commit is contained in:
65
Core.Blueprint.Mongo/Configuration/RegisterBlueprint.cs
Normal file
65
Core.Blueprint.Mongo/Configuration/RegisterBlueprint.cs
Normal file
@@ -0,0 +1,65 @@
|
||||
using Core.Blueprint.Mongo;
|
||||
using Core.Blueprint.Mongo.Configuration;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Options;
|
||||
using MongoDB.Driver;
|
||||
|
||||
namespace Core.Blueprint.DAL.Mongo.Configuration
|
||||
{
|
||||
/// <summary>
|
||||
/// The <see cref="RegisterBlueprint"/> class contains extension methods for registering the MongoDB context and configuration settings
|
||||
/// to the <see cref="IServiceCollection"/> in the dependency injection container.
|
||||
/// </summary>
|
||||
public static class RegisterBlueprint
|
||||
{
|
||||
/// <summary>
|
||||
/// Adds the MongoDB layer services to the <see cref="IServiceCollection"/>.
|
||||
/// Registers the MongoDB context and configuration settings for MongoDB connection, database name, and audience.
|
||||
/// </summary>
|
||||
/// <param name="services">The <see cref="IServiceCollection"/> to which the services will be added.</param>
|
||||
/// <param name="configuration">The <see cref="IConfiguration"/> used to load MongoDB settings.</param>
|
||||
/// <returns>The updated <see cref="IServiceCollection"/> with MongoDB services registered.</returns>
|
||||
public static IServiceCollection AddMongoLayer(this IServiceCollection services, IConfiguration configuration)
|
||||
{
|
||||
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? string.Empty;
|
||||
|
||||
services.AddSingleton<IMongoContext, MongoContext>();
|
||||
|
||||
var ConnectionString = configuration.GetSection("ConnectionStrings:MongoDB").Value ?? string.Empty;
|
||||
var Databasename = configuration.GetSection("MongoDb:DatabaseName").Value ?? string.Empty;
|
||||
var Audience = (environment == "Local")
|
||||
? configuration.GetSection("MongoDb:LocalAudience").Value
|
||||
: configuration.GetSection("MongoDb:Audience").Value;
|
||||
|
||||
if (string.IsNullOrEmpty(ConnectionString) || string.IsNullOrEmpty(Databasename) || string.IsNullOrEmpty(Audience))
|
||||
throw new InvalidOperationException("Mongo connection is not configured correctly.");
|
||||
|
||||
services.Configure<MongoDbSettings>(options =>
|
||||
{
|
||||
options.ConnectionString = ConnectionString;
|
||||
options.Databasename = Databasename;
|
||||
options.Audience = Audience;
|
||||
});
|
||||
|
||||
services.AddSingleton<IMongoClient>(serviceProvider =>
|
||||
{
|
||||
var settings = serviceProvider.GetRequiredService<IOptions<MongoDbSettings>>().Value;
|
||||
var mongoClientSettings = MongoClientSettings.FromConnectionString(settings.ConnectionString);
|
||||
mongoClientSettings.Credential = MongoCredential.CreateOidcCredential(new HeathIdentityProvider(settings.Audience));
|
||||
return new MongoClient(mongoClientSettings);
|
||||
});
|
||||
|
||||
services.AddSingleton<IMongoDatabase>(serviceProvider =>
|
||||
{
|
||||
var settings = serviceProvider.GetRequiredService<IOptions<MongoDbSettings>>().Value;
|
||||
var client = serviceProvider.GetRequiredService<IMongoClient>();
|
||||
return client.GetDatabase(settings.Databasename);
|
||||
});
|
||||
|
||||
services.AddSingleton<IMongoDbSettings>(serviceProvider => serviceProvider.GetRequiredService<IOptions<MongoDbSettings>>().Value);
|
||||
|
||||
return services;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user