fix: Cache JsonSerializerOptions for NordigenHttpClient
This reduces execution time and memory allocation for GetRequiredService<INordigenClient>() by an order of magnitude
This commit is contained in:
@@ -73,6 +73,7 @@ public static class ServiceCollectionExtensions
|
||||
|
||||
return serviceCollection
|
||||
.AddSingleton<NordigenTokenCache>()
|
||||
.AddSingleton<NordigenJsonSerializerOptions>()
|
||||
.AddTransient<INordigenClient, NordigenClient>()
|
||||
.AddTransient<IAccountClient, AccountClient>()
|
||||
.AddTransient<IAgreementClient, AgreementClient>()
|
||||
|
||||
@@ -7,13 +7,9 @@ using System.Net.Http;
|
||||
using System.Net.Http.Json;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using NodaTime;
|
||||
using NodaTime.Serialization.SystemTextJson;
|
||||
|
||||
namespace VMelnalksnis.NordigenDotNet;
|
||||
|
||||
/// <summary><see cref="HttpClient"/> wrapper that uses the correct serialization settings for all requests.</summary>
|
||||
@@ -24,15 +20,11 @@ public sealed class NordigenHttpClient
|
||||
|
||||
/// <summary>Initializes a new instance of the <see cref="NordigenHttpClient"/> class.</summary>
|
||||
/// <param name="httpClient">Http client configured for making requests to the Nordigen API.</param>
|
||||
/// <param name="dateTimeZoneProvider">Time zone provider for date and time serialization.</param>
|
||||
public NordigenHttpClient(HttpClient httpClient, IDateTimeZoneProvider dateTimeZoneProvider)
|
||||
/// <param name="nordigenJsonSerializerOptions">Nordigen specific instance of <see cref="JsonSerializerOptions"/>.</param>
|
||||
public NordigenHttpClient(HttpClient httpClient, NordigenJsonSerializerOptions nordigenJsonSerializerOptions)
|
||||
{
|
||||
_httpClient = httpClient;
|
||||
|
||||
_serializerOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web)
|
||||
{
|
||||
Converters = { new JsonStringEnumConverter() },
|
||||
}.ConfigureForNodaTime(dateTimeZoneProvider);
|
||||
_serializerOptions = nordigenJsonSerializerOptions.Options;
|
||||
}
|
||||
|
||||
internal async Task<TResult?> Get<TResult>(string requestUri, CancellationToken cancellationToken)
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
// Copyright 2022 Valters Melnalksnis
|
||||
// Licensed under the Apache License 2.0.
|
||||
// See LICENSE file in the project root for full license information.
|
||||
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
using NodaTime;
|
||||
using NodaTime.Serialization.SystemTextJson;
|
||||
|
||||
namespace VMelnalksnis.NordigenDotNet;
|
||||
|
||||
/// <summary><see cref="JsonSerializerOptions"/> for <see cref="NordigenHttpClient"/>.</summary>
|
||||
public sealed class NordigenJsonSerializerOptions
|
||||
{
|
||||
/// <summary>Initializes a new instance of the <see cref="NordigenJsonSerializerOptions"/> class.</summary>
|
||||
/// <param name="dateTimeZoneProvider">Time zone provider for date and time serialization.</param>
|
||||
public NordigenJsonSerializerOptions(IDateTimeZoneProvider dateTimeZoneProvider)
|
||||
{
|
||||
Options = new JsonSerializerOptions(JsonSerializerDefaults.Web)
|
||||
{
|
||||
Converters = { new JsonStringEnumConverter() },
|
||||
}.ConfigureForNodaTime(dateTimeZoneProvider);
|
||||
}
|
||||
|
||||
internal JsonSerializerOptions Options { get; }
|
||||
}
|
||||
Reference in New Issue
Block a user