From 852560d0e23cff2acec8f7a8cc195cde197614a3 Mon Sep 17 00:00:00 2001 From: Oscar Morales Date: Fri, 6 Jun 2025 10:22:40 -0600 Subject: [PATCH] Add some fixes in cache settings --- .../Configuration/RegisterBlueprint.cs | 29 ++++++++++++++----- .../Configuration/RegisterBlueprint.cs | 2 -- Core.Blueprint.Redis/RedisCacheProvider.cs | 21 ++++++++++++-- 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/Core.Blueprint.Mongo/Configuration/RegisterBlueprint.cs b/Core.Blueprint.Mongo/Configuration/RegisterBlueprint.cs index ec55e3f..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 { @@ -22,14 +23,19 @@ namespace Core.Blueprint.DAL.Mongo.Configuration /// The updated with MongoDB services registered. public static IServiceCollection AddMongoLayer(this IServiceCollection services, IConfiguration configuration) { - string text = "Local"; + 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 = text == "Local" - ? configuration.GetSection("MongoDb:LocalAudience").Value - : configuration.GetSection("MongoDb:Audience").Value; - if (string.IsNullOrEmpty(ConnectionString) || string.IsNullOrEmpty(Databasename) || string.IsNullOrEmpty(Audience)) + string Audience = string.Empty; + + if (!environment.Equals("Local", StringComparison.OrdinalIgnoreCase)) + { + Audience = configuration.GetSection("MongoDb:Audience").Value ?? string.Empty; + } + + if (string.IsNullOrEmpty(ConnectionString) || string.IsNullOrEmpty(Databasename)) { throw new InvalidOperationException("Mongo connection is not configured correctly."); } @@ -38,13 +44,22 @@ namespace Core.Blueprint.DAL.Mongo.Configuration { options.ConnectionString = ConnectionString; options.Databasename = Databasename; - options.Audience = Audience; + + if (!environment.Equals("Local", StringComparison.OrdinalIgnoreCase)) + { + options.Audience = Audience; + } }); services.AddSingleton((Func)delegate (IServiceProvider serviceProvider) { MongoDbSettings value2 = serviceProvider.GetRequiredService>().Value; MongoClientSettings mongoClientSettings = MongoClientSettings.FromConnectionString(value2.ConnectionString); - //mongoClientSettings.Credential = MongoCredential.CreateOidcCredential(new AzureIdentityProvider(value2.Audience)); + + if (!environment.Equals("Local", StringComparison.OrdinalIgnoreCase)) + { + mongoClientSettings.Credential = MongoCredential.CreateOidcCredential(new AzureIdentityProvider(value2.Audience)); + } + return new MongoClient(mongoClientSettings); }); services.AddSingleton(delegate (IServiceProvider serviceProvider) 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.");