66 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using Core.Inventory.External.Clients.Inventory;
 | |
| using Core.Inventory.External.GatewayConfigurations;
 | |
| using Lib.Architecture.BuildingBlocks.Helpers.Token;
 | |
| using Microsoft.AspNetCore.Http;
 | |
| using Microsoft.Extensions.Configuration;
 | |
| using Microsoft.Extensions.DependencyInjection;
 | |
| using Refit;
 | |
| 
 | |
| namespace Core.Inventory.External.ClientConfiguration
 | |
| {
 | |
|     public static class RegisterClientConfiguration
 | |
|     {
 | |
|         public static IServiceCollection RegisterExternalLayer(this IServiceCollection services, IConfiguration configuration)
 | |
|         {
 | |
|             var gatewayConfiguration = new GatewayConfiguration();
 | |
|             var gatewaySettingsConfiguration = new GatewaySettingsConfigurations(configuration);
 | |
| 
 | |
|             // Register GatewayConfiguration as a singleton
 | |
|             services.AddSingleton(gatewayConfiguration);
 | |
| 
 | |
|             // Register IHttpContextAccessor
 | |
|             services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
 | |
| 
 | |
|             // Register ITokenProvider
 | |
|             services.AddSingleton<ITokenProvider, HttpContextTokenProvider>();
 | |
| 
 | |
|             // Register the custom AuthenticatedHttpClientHandler
 | |
|             services.AddTransient(provider =>
 | |
|             {
 | |
|                 var tokenProvider = provider.GetRequiredService<ITokenProvider>();
 | |
|                 var trackingIdHandler = new TrackingMechanismExtension(provider.GetRequiredService<IHttpContextAccessor>());
 | |
| 
 | |
|                 var handler = new AuthenticatedHttpClientHandler(tokenProvider)
 | |
|                 {
 | |
|                     InnerHandler = new HttpClientHandler() // Setting the InnerHandler manually
 | |
|                 };
 | |
| 
 | |
|                 // Attach the TrackingIdHandler as the outermost handler
 | |
|                 trackingIdHandler.InnerHandler = handler;
 | |
| 
 | |
|                 return handler;
 | |
|             });
 | |
| 
 | |
|             var inventoryServiceApiUrl = GatewaySettingsConfigurations.GetInventoryServiceAPIEndpoint().Endpoint.Url;
 | |
| 
 | |
|             // Register IDashBoardServiceClient with the manually created HttpClient
 | |
|             services.AddScoped(provider =>
 | |
|             {
 | |
|                 var handler = provider.GetRequiredService<AuthenticatedHttpClientHandler>();
 | |
|                 var handlerTrackingId = new TrackingMechanismExtension(provider.GetRequiredService<IHttpContextAccessor>()); // Using the TrackingIdHandler here
 | |
|                                                                                                                              // Chain the handlers
 | |
|                 handlerTrackingId.InnerHandler = handler; //chaining
 | |
| 
 | |
|                 var httpClient = new HttpClient(handlerTrackingId)
 | |
|                 {
 | |
|                     BaseAddress = new Uri(inventoryServiceApiUrl),
 | |
|                     Timeout = TimeSpan.FromMinutes(1)
 | |
|                 };
 | |
|                 return RestService.For<IInventoryServiceClient>(httpClient);
 | |
|             });
 | |
| 
 | |
|             return services;
 | |
|         }
 | |
|     }
 | |
| }
 |