diff --git a/src/RadixDlt.NetworkGateway.GatewayApi/ServiceCollectionExtensions.cs b/src/RadixDlt.NetworkGateway.GatewayApi/ServiceCollectionExtensions.cs index 251469d2c..60efdba48 100644 --- a/src/RadixDlt.NetworkGateway.GatewayApi/ServiceCollectionExtensions.cs +++ b/src/RadixDlt.NetworkGateway.GatewayApi/ServiceCollectionExtensions.cs @@ -123,6 +123,9 @@ public static GatewayApiBuilder AddNetworkGatewayApiCore(this IServiceCollection // Request-scoped services AddRequestServices(services); + // Node-Scoped services + AddNodeScopedServices(services); + // Transient (pooled) services AddCoreApiHttpClient(services, out var coreApiHttpClientBuilder, out var coreNodeHealthCheckerClientBuilder); @@ -136,6 +139,13 @@ private static void AddSingletonServices(IServiceCollection services) services.TryAddSingleton(); } + private static void AddNodeScopedServices(IServiceCollection services) + { + services.TryAddScoped(); + services.TryAddScoped(sp => sp.GetRequiredService()); + services.TryAddScoped(sp => sp.GetRequiredService()); + } + private static void AddRequestServices(IServiceCollection services) { services.TryAddScoped(); @@ -151,10 +161,8 @@ private static void AddRequestServices(IServiceCollection services) private static void AddCoreApiHttpClient(IServiceCollection services, out IHttpClientBuilder coreApiHttpClientBuilder, out IHttpClientBuilder coreNodeHealthCheckerClientBuilder) { - // NB - AddHttpClient is essentially like AddTransient, except it provides a HttpClient from the HttpClientFactory - // See https://docs.microsoft.com/en-us/dotnet/architecture/microservices/implement-resilient-applications/use-httpclientfactory-to-implement-resilient-http-requests coreApiHttpClientBuilder = services - .AddHttpClient() + .AddHttpClient() .AddPolicyHandler((serviceProvider, _) => { var retryCount = serviceProvider.GetRequiredService>().Value.MaxTransientErrorRetryCount; @@ -165,6 +173,9 @@ private static void AddCoreApiHttpClient(IServiceCollection services, out IHttpC }) .ConfigurePrimaryHttpMessageHandler(serviceProvider => ConfigureHttpClientHandler(serviceProvider.GetRequiredService>())); + services + .AddTransient(); + coreNodeHealthCheckerClientBuilder = services .AddHttpClient() .ConfigurePrimaryHttpMessageHandler(serviceProvider => ConfigureHttpClientHandler(serviceProvider.GetRequiredService>())); diff --git a/src/RadixDlt.NetworkGateway.GatewayApi/Validators/RadixAddressValidator.cs b/src/RadixDlt.NetworkGateway.GatewayApi/Validators/RadixAddressValidator.cs index b332e4601..99112a27a 100644 --- a/src/RadixDlt.NetworkGateway.GatewayApi/Validators/RadixAddressValidator.cs +++ b/src/RadixDlt.NetworkGateway.GatewayApi/Validators/RadixAddressValidator.cs @@ -74,6 +74,8 @@ public sealed class RadixAddressValidator : AbstractValidator { public RadixAddressValidator(INetworkConfigurationProvider networkConfigurationProvider) { + // TODO: + //Has to be sync. RuleFor(x => x) .CustomAsync(async (address, context, token) => {