103 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using Core.Thalos.Infraestructure.Caching.Contracts;
 | |
| using Core.Thalos.Infraestructure.Contexts.Mongo;
 | |
| using Core.Thalos.Provider.Contracts;
 | |
| using Core.Thalos.Provider.Providers;
 | |
| using Core.Thalos.Provider.Providers.Onboarding;
 | |
| using LSA.Core.Dapper.Service.Caching;
 | |
| using Microsoft.Extensions.Configuration;
 | |
| using Microsoft.Extensions.DependencyInjection;
 | |
| using Microsoft.Extensions.Logging;
 | |
| using Microsoft.Extensions.Options;
 | |
| using MongoDB.Driver;
 | |
| 
 | |
| namespace Core.Thalos.Provider
 | |
| {
 | |
|     public static class ServiceCollectionExtensions
 | |
|     {
 | |
|         public static IServiceCollection AddDALLayer(this IServiceCollection services, IConfiguration configuration)
 | |
|         {
 | |
|             var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? 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 (string.IsNullOrEmpty(connectionString) || string.IsNullOrEmpty(databaseName) || string.IsNullOrEmpty(audience))
 | |
|             {
 | |
|                 throw new InvalidOperationException("Mongo connection is not configured correctly.");
 | |
|             }
 | |
| 
 | |
|             services.Configure<MongoConnSettings>(options =>
 | |
|             {
 | |
|                 options.ConnectionString = connectionString;
 | |
|                 options.Databasename = databaseName;
 | |
|                 options.Audience = audience ?? string.Empty;
 | |
|             });
 | |
| 
 | |
|             services.AddSingleton<IMongoClient>(serviceProvider =>
 | |
|             {
 | |
|                 var settings = serviceProvider.GetRequiredService<IOptions<MongoConnSettings>>().Value;
 | |
|                 var mongoClientSettings = MongoClientSettings.FromConnectionString(settings.ConnectionString);
 | |
|                 mongoClientSettings.Credential = MongoCredential.CreateOidcCredential(new HeathOidcCallback(settings.Audience));
 | |
|                 return new MongoClient(mongoClientSettings);
 | |
|             });
 | |
| 
 | |
|             services.AddSingleton<IMongoDatabase>(serviceProvider =>
 | |
|             {
 | |
|                 var settings = serviceProvider.GetRequiredService<IOptions<MongoConnSettings>>().Value;
 | |
|                 var client = serviceProvider.GetRequiredService<IMongoClient>();
 | |
|                 return client.GetDatabase(settings.Databasename);
 | |
|             });
 | |
| 
 | |
|             services.AddDALConfigurationLayer();
 | |
|             services.AddLogs();
 | |
|             services.AddRedisCacheService(configuration);
 | |
| 
 | |
|             return services;
 | |
|         }
 | |
| 
 | |
| 
 | |
|         private static IServiceCollection AddDALConfigurationLayer(this IServiceCollection services)
 | |
|         {
 | |
|             services.AddHttpContextAccessor();
 | |
| 
 | |
|             services.AddScoped<IUserProvider, UserProvider>();
 | |
|             services.AddScoped<IRoleProvider, RoleProvider>();
 | |
|             services.AddScoped<IPermissionProvider, PermissionProvider>();
 | |
|             services.AddScoped<IPermissionProvider, PermissionProvider>();
 | |
|             services.AddScoped<IModuleProvider, ModuleProvider>();
 | |
|             return services;
 | |
|         }
 | |
| 
 | |
|         private static IServiceCollection AddLogs(this IServiceCollection services)
 | |
|         {
 | |
|             services.AddLogging();
 | |
|             var serviceProvider = services.BuildServiceProvider();
 | |
|             //var logger = serviceProvider.GetService<ILogger<DashboardDALService>>(); //Add for Markup class later TODO
 | |
| 
 | |
|             //services.AddSingleton(typeof(ILogger), logger);
 | |
| 
 | |
|             return services;
 | |
|         }
 | |
| 
 | |
|         private static IServiceCollection AddRedisCacheService(this IServiceCollection services, IConfiguration configuration)
 | |
|         {
 | |
|             var source = configuration.GetSection("ConnectionStrings");
 | |
| 
 | |
|             var redisConnectionString = source["Redis"]?.ToString();
 | |
| 
 | |
|             if (string.IsNullOrEmpty(redisConnectionString))
 | |
|             {
 | |
|                 throw new InvalidOperationException("Redis connection string is not configured.");
 | |
|             }
 | |
| 
 | |
|             services.AddSingleton<ICacheService>(provider =>
 | |
|                 new CacheService(redisConnectionString, provider.GetRequiredService<ILogger<CacheService>>()));
 | |
| 
 | |
|             return services;
 | |
|         }
 | |
|     }
 | |
| }
 | 
