diff --git a/Core.Blueprint.Mongo/Configuration/RegisterBlueprint.cs b/Core.Blueprint.Mongo/Configuration/RegisterBlueprint.cs index e690faa..6feebe0 100644 --- a/Core.Blueprint.Mongo/Configuration/RegisterBlueprint.cs +++ b/Core.Blueprint.Mongo/Configuration/RegisterBlueprint.cs @@ -4,6 +4,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using MongoDB.Driver; +using static MongoDB.Driver.WriteConcern; namespace Core.Blueprint.DAL.Mongo.Configuration { @@ -23,42 +24,50 @@ namespace Core.Blueprint.DAL.Mongo.Configuration public static IServiceCollection AddMongoLayer(this IServiceCollection services, IConfiguration configuration) { var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? string.Empty; - + services.AddSingleton(); + string ConnectionString = configuration.GetSection("ConnectionStrings:MongoDB").Value ?? string.Empty; + string Databasename = configuration.GetSection("MongoDb:DatabaseName").Value ?? string.Empty; + string Audience = string.Empty; - 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 (!environment.Equals("Local", StringComparison.OrdinalIgnoreCase)) + { + Audience = configuration.GetSection("MongoDb:Audience").Value ?? string.Empty; + } - if (string.IsNullOrEmpty(ConnectionString) || string.IsNullOrEmpty(Databasename) || string.IsNullOrEmpty(Audience)) + if (string.IsNullOrEmpty(ConnectionString) || string.IsNullOrEmpty(Databasename)) + { throw new InvalidOperationException("Mongo connection is not configured correctly."); + } - services.Configure(options => + services.Configure(delegate (MongoDbSettings options) { options.ConnectionString = ConnectionString; options.Databasename = Databasename; - options.Audience = Audience; - }); - services.AddSingleton(serviceProvider => + if (!environment.Equals("Local", StringComparison.OrdinalIgnoreCase)) + { + options.Audience = Audience; + } + }); + services.AddSingleton((Func)delegate (IServiceProvider serviceProvider) { - var settings = serviceProvider.GetRequiredService>().Value; - var mongoClientSettings = MongoClientSettings.FromConnectionString(settings.ConnectionString); - mongoClientSettings.Credential = MongoCredential.CreateOidcCredential(new AzureIdentityProvider(settings.Audience)); + MongoDbSettings value2 = serviceProvider.GetRequiredService>().Value; + MongoClientSettings mongoClientSettings = MongoClientSettings.FromConnectionString(value2.ConnectionString); + + if (!environment.Equals("Local", StringComparison.OrdinalIgnoreCase)) + { + mongoClientSettings.Credential = MongoCredential.CreateOidcCredential(new AzureIdentityProvider(value2.Audience)); + } + return new MongoClient(mongoClientSettings); }); - - services.AddSingleton(serviceProvider => + services.AddSingleton(delegate (IServiceProvider serviceProvider) { - var settings = serviceProvider.GetRequiredService>().Value; - var client = serviceProvider.GetRequiredService(); - return client.GetDatabase(settings.Databasename); + MongoDbSettings value = serviceProvider.GetRequiredService>().Value; + return serviceProvider.GetRequiredService().GetDatabase(value.Databasename); }); - - services.AddSingleton(serviceProvider => serviceProvider.GetRequiredService>().Value); - + services.AddSingleton((Func)((IServiceProvider serviceProvider) => serviceProvider.GetRequiredService>().Value)); return services; } } diff --git a/Core.Blueprint.Redis/Configuration/RegisterBlueprint.cs b/Core.Blueprint.Redis/Configuration/RegisterBlueprint.cs index ec42cda..854b173 100644 --- a/Core.Blueprint.Redis/Configuration/RegisterBlueprint.cs +++ b/Core.Blueprint.Redis/Configuration/RegisterBlueprint.cs @@ -21,8 +21,6 @@ namespace Core.Blueprint.Caching.Configuration { // TODO for the following variable we'll need to add in the appsettings.json the following config: "UseRedisCache": true, bool useRedis = configuration.GetValue("UseRedisCache"); - //TODO decide wheter to use appsettings or the following ENV variable - useRedis = Environment.GetEnvironmentVariable("CORE_BLUEPRINT_PACKAGES_USE_REDIS")?.ToLower() == "true"; if (useRedis) { diff --git a/Core.Blueprint.Redis/RedisCacheProvider.cs b/Core.Blueprint.Redis/RedisCacheProvider.cs index 7715f44..90901ce 100644 --- a/Core.Blueprint.Redis/RedisCacheProvider.cs +++ b/Core.Blueprint.Redis/RedisCacheProvider.cs @@ -35,14 +35,29 @@ namespace Core.Blueprint.Caching /// The Redis connection string. /// An instance representing the Redis cache database. /// Thrown when the connection to Redis fails. InitializeRedisAsync(string connectionString) + public async Task InitializeRedisAsync(string connectionString) { try { - var configurationOptions = await ConfigurationOptions.Parse($"{connectionString}") - .ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential()); + var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? string.Empty; + + ConfigurationOptions configurationOptions; + + if (environment.Equals("Local", StringComparison.OrdinalIgnoreCase)) + { + // Use simple local Redis config + configurationOptions = ConfigurationOptions.Parse(connectionString); + } + else + { + // Use Azure Redis config + configurationOptions = await ConfigurationOptions + .Parse(connectionString) + .ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential()); + } configurationOptions.AbortOnConnectFail = false; + var connectionMultiplexer = await ConnectionMultiplexer.ConnectAsync(configurationOptions); _logger.LogInformation("Successfully connected to Redis.");