Add some fixes in cache settings
This commit is contained in:
		| @@ -4,6 +4,7 @@ using Microsoft.Extensions.Configuration; | |||||||
| using Microsoft.Extensions.DependencyInjection; | using Microsoft.Extensions.DependencyInjection; | ||||||
| using Microsoft.Extensions.Options; | using Microsoft.Extensions.Options; | ||||||
| using MongoDB.Driver; | using MongoDB.Driver; | ||||||
|  | using static MongoDB.Driver.WriteConcern; | ||||||
|  |  | ||||||
| namespace Core.Blueprint.DAL.Mongo.Configuration | namespace Core.Blueprint.DAL.Mongo.Configuration | ||||||
| { | { | ||||||
| @@ -22,14 +23,19 @@ namespace Core.Blueprint.DAL.Mongo.Configuration | |||||||
|         /// <returns>The updated <see cref="IServiceCollection"/> with MongoDB services registered.</returns> |         /// <returns>The updated <see cref="IServiceCollection"/> with MongoDB services registered.</returns> | ||||||
|         public static IServiceCollection AddMongoLayer(this IServiceCollection services, IConfiguration configuration) |         public static IServiceCollection AddMongoLayer(this IServiceCollection services, IConfiguration configuration) | ||||||
|         { |         { | ||||||
|             string text = "Local"; |             var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? string.Empty; | ||||||
|  |              | ||||||
|             services.AddSingleton<IMongoContext, MongoContext>(); |             services.AddSingleton<IMongoContext, MongoContext>(); | ||||||
|             string ConnectionString = configuration.GetSection("ConnectionStrings:MongoDB").Value ?? string.Empty; |             string ConnectionString = configuration.GetSection("ConnectionStrings:MongoDB").Value ?? string.Empty; | ||||||
|             string Databasename = configuration.GetSection("MongoDb:DatabaseName").Value ?? string.Empty; |             string Databasename = configuration.GetSection("MongoDb:DatabaseName").Value ?? string.Empty; | ||||||
|             string Audience = text == "Local" |             string Audience = string.Empty; | ||||||
|                 ? configuration.GetSection("MongoDb:LocalAudience").Value |  | ||||||
|                 : configuration.GetSection("MongoDb:Audience").Value; |             if (!environment.Equals("Local", StringComparison.OrdinalIgnoreCase)) | ||||||
|             if (string.IsNullOrEmpty(ConnectionString) || string.IsNullOrEmpty(Databasename) || string.IsNullOrEmpty(Audience)) |             { | ||||||
|  |                 Audience = configuration.GetSection("MongoDb:Audience").Value ?? string.Empty; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (string.IsNullOrEmpty(ConnectionString) || string.IsNullOrEmpty(Databasename)) | ||||||
|             { |             { | ||||||
|                 throw new InvalidOperationException("Mongo connection is not configured correctly."); |                 throw new InvalidOperationException("Mongo connection is not configured correctly."); | ||||||
|             } |             } | ||||||
| @@ -38,13 +44,22 @@ namespace Core.Blueprint.DAL.Mongo.Configuration | |||||||
|             { |             { | ||||||
|                 options.ConnectionString = ConnectionString; |                 options.ConnectionString = ConnectionString; | ||||||
|                 options.Databasename = Databasename; |                 options.Databasename = Databasename; | ||||||
|                 options.Audience = Audience; |  | ||||||
|  |                 if (!environment.Equals("Local", StringComparison.OrdinalIgnoreCase)) | ||||||
|  |                 { | ||||||
|  |                     options.Audience = Audience; | ||||||
|  |                 } | ||||||
|             }); |             }); | ||||||
|             services.AddSingleton((Func<IServiceProvider, IMongoClient>)delegate (IServiceProvider serviceProvider) |             services.AddSingleton((Func<IServiceProvider, IMongoClient>)delegate (IServiceProvider serviceProvider) | ||||||
|             { |             { | ||||||
|                 MongoDbSettings value2 = serviceProvider.GetRequiredService<IOptions<MongoDbSettings>>().Value; |                 MongoDbSettings value2 = serviceProvider.GetRequiredService<IOptions<MongoDbSettings>>().Value; | ||||||
|                 MongoClientSettings mongoClientSettings = MongoClientSettings.FromConnectionString(value2.ConnectionString); |                 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); |                 return new MongoClient(mongoClientSettings); | ||||||
|             }); |             }); | ||||||
|             services.AddSingleton(delegate (IServiceProvider serviceProvider) |             services.AddSingleton(delegate (IServiceProvider serviceProvider) | ||||||
|   | |||||||
| @@ -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, |             // TODO for the following variable we'll need to add in the appsettings.json the following config: "UseRedisCache": true, | ||||||
|             bool useRedis = configuration.GetValue<bool>("UseRedisCache"); |             bool useRedis = configuration.GetValue<bool>("UseRedisCache"); | ||||||
|             //TODO decide wheter to use appsettings or the following ENV variable |  | ||||||
|             useRedis = Environment.GetEnvironmentVariable("CORE_BLUEPRINT_PACKAGES_USE_REDIS")?.ToLower() == "true"; |  | ||||||
|  |  | ||||||
|             if (useRedis) |             if (useRedis) | ||||||
|             { |             { | ||||||
|   | |||||||
| @@ -35,14 +35,29 @@ namespace Core.Blueprint.Caching | |||||||
|         /// <param name="connectionString">The Redis connection string.</param> |         /// <param name="connectionString">The Redis connection string.</param> | ||||||
|         /// <returns>An <see cref="IDatabase"/> instance representing the Redis cache database.</returns> |         /// <returns>An <see cref="IDatabase"/> instance representing the Redis cache database.</returns> | ||||||
|         /// <exception cref="Exception">Thrown when the connection to Redis fails.</exce |         /// <exception cref="Exception">Thrown when the connection to Redis fails.</exce | ||||||
|         async Task<IDatabase> InitializeRedisAsync(string connectionString) |         public async Task<IDatabase> InitializeRedisAsync(string connectionString) | ||||||
|         { |         { | ||||||
|             try |             try | ||||||
|             { |             { | ||||||
|                 var configurationOptions = await ConfigurationOptions.Parse($"{connectionString}") |                 var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? string.Empty; | ||||||
|                     .ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential()); |  | ||||||
|  |                 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; |                 configurationOptions.AbortOnConnectFail = false; | ||||||
|  |  | ||||||
|                 var connectionMultiplexer = await ConnectionMultiplexer.ConnectAsync(configurationOptions); |                 var connectionMultiplexer = await ConnectionMultiplexer.ConnectAsync(configurationOptions); | ||||||
|  |  | ||||||
|                 _logger.LogInformation("Successfully connected to Redis."); |                 _logger.LogInformation("Successfully connected to Redis."); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Oscar Morales
					Oscar Morales