Skip to content
This repository was archived by the owner on Feb 23, 2024. It is now read-only.

Commit c1a043f

Browse files
f-alizadaFarhad Alizada
andauthored
Add http client factory (#764)
* Add httpclientFactory to DI * Add mock IHHtpClientFactory and basic test Co-authored-by: Farhad Alizada <falizada@microsoft.com>
1 parent b0781ab commit c1a043f

File tree

25 files changed

+227
-15
lines changed

25 files changed

+227
-15
lines changed

src/ArmTemplates/ArmTemplates.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
<PackageReference Include="CommandLineParser" Version="2.8.0" />
2929
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
3030
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
31+
<PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
3132
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.15.1" />
3233
<PackageReference Include="Serilog.Extensions.Logging" Version="3.1.0" />
3334
<PackageReference Include="Serilog.Sinks.Console" Version="4.0.1" />

src/ArmTemplates/Common/API/Clients/Abstractions/ApiClientBase.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,15 @@ namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clien
1919
public abstract class ApiClientBase
2020
{
2121
readonly IMemoryCache cache = new MemoryCache(new MemoryCacheOptions());
22-
readonly HttpClient httpClient = new HttpClient();
22+
readonly HttpClient httpClient;
2323

2424
protected string BaseUrl { get; private set; } = GlobalConstants.BaseManagementAzureUrl;
2525

26-
protected AzureCliAuthenticator Auth { get; private set; } = new AzureCliAuthenticator();
26+
protected virtual AzureCliAuthenticator Auth { get; private set; } = new AzureCliAuthenticator();
2727

28-
public ApiClientBase(string baseUrl = null)
28+
public ApiClientBase(IHttpClientFactory httpClientFactory)
2929
{
30-
if (!string.IsNullOrEmpty(baseUrl))
31-
{
32-
this.BaseUrl = baseUrl;
33-
}
30+
this.httpClient = httpClientFactory.CreateClient();
3431
}
3532

3633
protected async Task<string> CallApiManagementAsync(string azToken, string requestUrl, bool useCache = true, ClientHttpMethod method = ClientHttpMethod.GET)

src/ArmTemplates/Common/API/Clients/ApiOperations/ApiOperationClient.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// --------------------------------------------------------------------------
55

66
using System.Collections.Generic;
7+
using System.Net.Http;
78
using System.Threading.Tasks;
89
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
@@ -16,6 +17,10 @@ public class ApiOperationClient : ApiClientBase, IApiOperationClient
1617
{
1718
const string GetOperationsLinkedToApiRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/apis/{4}/operations?api-version={5}";
1819

20+
public ApiOperationClient(IHttpClientFactory httpClientFactory) : base(httpClientFactory)
21+
{
22+
}
23+
1924
public async Task<List<ApiOperationTemplateResource>> GetOperationsLinkedToApiAsync(string apiName, ExtractorParameters extractorParameters)
2025
{
2126
var (azToken, azSubId) = await this.Auth.GetAccessToken();

src/ArmTemplates/Common/API/Clients/ApiRevision/ApiRevisionClient.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// --------------------------------------------------------------------------
55

66
using System.Collections.Generic;
7+
using System.Net.Http;
78
using System.Threading.Tasks;
89
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
@@ -16,6 +17,10 @@ public class ApiRevisionClient : ApiClientBase, IApiRevisionClient
1617
{
1718
const string GetApiRevisionsRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/apis/{4}/revisions?api-version={5}";
1819

20+
public ApiRevisionClient(IHttpClientFactory httpClientFactory) : base(httpClientFactory)
21+
{
22+
}
23+
1924
public async Task<List<ApiRevisionTemplateResource>> GetApiRevisionsAsync(string apiName, ExtractorParameters extractorParameters)
2025
{
2126
var (azToken, azSubId) = await this.Auth.GetAccessToken();

src/ArmTemplates/Common/API/Clients/ApiSchemas/ApiSchemaClient.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// --------------------------------------------------------------------------
55

66
using System.Collections.Generic;
7+
using System.Net.Http;
78
using System.Threading.Tasks;
89
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
@@ -16,6 +17,10 @@ public class ApiSchemaClient : ApiClientBase, IApiSchemaClient
1617
{
1718
const string GetAllApiSchemasRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/apis/{4}/schemas?api-version={5}";
1819

20+
public ApiSchemaClient(IHttpClientFactory httpClientFactory) : base(httpClientFactory)
21+
{
22+
}
23+
1924
public async Task<List<ApiSchemaTemplateResource>> GetApiSchemasAsync(string apiName, ExtractorParameters extractorParameters)
2025
{
2126
var (azToken, azSubId) = await this.Auth.GetAccessToken();

src/ArmTemplates/Common/API/Clients/ApiVersionSet/ApiVersionSetClient.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// --------------------------------------------------------------------------
55

66
using System.Collections.Generic;
7+
using System.Net.Http;
78
using System.Threading.Tasks;
89
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
@@ -16,6 +17,10 @@ public class ApiVersionSetClient : ApiClientBase, IApiVersionSetClient
1617
{
1718
const string GetAllVersionSetsRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/apiVersionSets?api-version={4}";
1819

20+
public ApiVersionSetClient(IHttpClientFactory httpClientFactory) : base(httpClientFactory)
21+
{
22+
}
23+
1924
public async Task<List<ApiVersionSetTemplateResource>> GetAllAsync(ExtractorParameters extractorParameters)
2025
{
2126
var (azToken, azSubId) = await this.Auth.GetAccessToken();

src/ArmTemplates/Common/API/Clients/Apis/ApisClient.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// --------------------------------------------------------------------------
55

66
using System.Collections.Generic;
7+
using System.Net.Http;
78
using System.Threading.Tasks;
89
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
@@ -19,6 +20,10 @@ public class ApisClient : ApiClientBase, IApisClient
1920
const string GetAllApisLinkedToProductRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/products/{4}/apis?api-version={5}";
2021
const string GetApisLinkedToGatewayRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/gateways/{4}/apis?api-version={5}";
2122

23+
public ApisClient(IHttpClientFactory httpClientFactory) : base(httpClientFactory)
24+
{
25+
}
26+
2227
public async Task<ApiTemplateResource> GetSingleAsync(string apiName, ExtractorParameters extractorParameters)
2328
{
2429
var (azToken, azSubId) = await this.Auth.GetAccessToken();

src/ArmTemplates/Common/API/Clients/AuthorizationServer/AuthorizationServerClient.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// --------------------------------------------------------------------------
55

66
using System.Collections.Generic;
7+
using System.Net.Http;
78
using System.Threading.Tasks;
89
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
@@ -16,6 +17,10 @@ public class AuthorizationServerClient : ApiClientBase, IAuthorizationServerClie
1617
{
1718
const string GetAllAuthorizationServersRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/authorizationServers?api-version={4}";
1819

20+
public AuthorizationServerClient(IHttpClientFactory httpClientFactory) : base(httpClientFactory)
21+
{
22+
}
23+
1924
public async Task<List<AuthorizationServerTemplateResource>> GetAllAsync(ExtractorParameters extractorParameters)
2025
{
2126
var (azToken, azSubId) = await this.Auth.GetAccessToken();

src/ArmTemplates/Common/API/Clients/Backend/BackendClient.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// --------------------------------------------------------------------------
55

66
using System.Collections.Generic;
7+
using System.Net.Http;
78
using System.Threading.Tasks;
89
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
@@ -16,6 +17,10 @@ public class BackendClient : ApiClientBase, IBackendClient
1617
{
1718
const string GetAllBackendsRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/backends?api-version={4}";
1819

20+
public BackendClient(IHttpClientFactory httpClientFactory) : base(httpClientFactory)
21+
{
22+
}
23+
1924
public async Task<List<BackendTemplateResource>> GetAllAsync(ExtractorParameters extractorParameters)
2025
{
2126
var (azToken, azSubId) = await this.Auth.GetAccessToken();

src/ArmTemplates/Common/API/Clients/Diagnostics/DiagnosticClient.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// --------------------------------------------------------------------------
55

66
using System.Collections.Generic;
7+
using System.Net.Http;
78
using System.Threading.Tasks;
89
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
@@ -17,6 +18,10 @@ public class DiagnosticClient : ApiClientBase, IDiagnosticClient
1718
const string GetAllDiagnosticsRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/diagnostics?api-version={4}";
1819
const string GetDiagnosticsLinkedToApiRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/apis/{4}/diagnostics?api-version={5}";
1920

21+
public DiagnosticClient(IHttpClientFactory httpClientFactory) : base(httpClientFactory)
22+
{
23+
}
24+
2025
public async Task<List<DiagnosticTemplateResource>> GetApiDiagnosticsAsync(string apiName, ExtractorParameters extractorParameters)
2126
{
2227
var (azToken, azSubId) = await this.Auth.GetAccessToken();

src/ArmTemplates/Common/API/Clients/Gateway/GatewayClient.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
using System.Collections.Generic;
77
using System.Linq;
8+
using System.Net.Http;
89
using System.Threading.Tasks;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
1011
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
@@ -23,8 +24,10 @@ public class GatewayClient : ApiClientBase, IGatewayClient
2324
readonly IApisClient apisClient;
2425

2526
public GatewayClient(
27+
IHttpClientFactory httpClientFactory,
2628
ILogger<GatewayClient> logger,
27-
IApisClient apisClient)
29+
IApisClient apisClient
30+
): base(httpClientFactory)
2831
{
2932
this.logger = logger;
3033
this.apisClient = apisClient;

src/ArmTemplates/Common/API/Clients/Groups/GroupsClient.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// --------------------------------------------------------------------------
55

66
using System.Collections.Generic;
7+
using System.Net.Http;
78
using System.Threading.Tasks;
89
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
@@ -20,7 +21,9 @@ public class GroupsClient : ApiClientBase, IGroupsClient
2021

2122
readonly IGroupDataProcessor groupDataProcessor;
2223

23-
public GroupsClient(IGroupDataProcessor groupDataProcessor)
24+
public GroupsClient(
25+
IHttpClientFactory httpClientFactory,
26+
IGroupDataProcessor groupDataProcessor): base(httpClientFactory)
2427
{
2528
this.groupDataProcessor = groupDataProcessor;
2629
}

src/ArmTemplates/Common/API/Clients/IdentityProviders/IdentityProviderClient.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// --------------------------------------------------------------------------
55

66
using System.Collections.Generic;
7+
using System.Net.Http;
78
using System.Threading.Tasks;
89
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Models;
@@ -21,7 +22,9 @@ public class IdentityProviderClient : ApiClientBase, IIdentityProviderClient
2122

2223
readonly IIdentityProviderProcessor identityProviderProcessor;
2324

24-
public IdentityProviderClient(IIdentityProviderProcessor identityProviderProcessor)
25+
public IdentityProviderClient(
26+
IHttpClientFactory httpClientFactory,
27+
IIdentityProviderProcessor identityProviderProcessor): base(httpClientFactory)
2528
{
2629
this.identityProviderProcessor = identityProviderProcessor;
2730
}

src/ArmTemplates/Common/API/Clients/Loggers/LoggerClient.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// --------------------------------------------------------------------------
55

66
using System.Collections.Generic;
7+
using System.Net.Http;
78
using System.Threading.Tasks;
89
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
@@ -16,6 +17,10 @@ public class LoggerClient : ApiClientBase, ILoggerClient
1617
{
1718
const string GetAllLoggersRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/loggers?api-version={4}";
1819

20+
public LoggerClient(IHttpClientFactory httpClientFactory) : base(httpClientFactory)
21+
{
22+
}
23+
1924
public async Task<List<LoggerTemplateResource>> GetAllAsync(ExtractorParameters extractorParameters)
2025
{
2126
var (azToken, azSubId) = await this.Auth.GetAccessToken();

src/ArmTemplates/Common/API/Clients/NamedValues/NamedValuesClient.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// --------------------------------------------------------------------------
55

66
using System.Collections.Generic;
7+
using System.Net.Http;
78
using System.Threading.Tasks;
89
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
@@ -16,6 +17,10 @@ public class NamedValuesClient : ApiClientBase, INamedValuesClient
1617
{
1718
const string GetNamedValuesRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/namedValues?api-version={4}";
1819

20+
public NamedValuesClient(IHttpClientFactory httpClientFactory) : base(httpClientFactory)
21+
{
22+
}
23+
1924
public async Task<List<NamedValueTemplateResource>> GetAllAsync(ExtractorParameters extractorParameters)
2025
{
2126
var (azToken, azSubId) = await this.Auth.GetAccessToken();

src/ArmTemplates/Common/API/Clients/Policy/PolicyClient.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// --------------------------------------------------------------------------
55

66
using System.Linq;
7+
using System.Net.Http;
78
using System.Threading.Tasks;
89
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
@@ -19,6 +20,10 @@ public class PolicyClient : ApiClientBase, IPolicyClient
1920
const string GetPolicyLinkedToApiRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/apis/{4}/policies?api-version={5}&format=rawxml";
2021
const string GetPolicyLinkedToApiOperationRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/apis/{4}/operations/{5}/policies?api-version={6}&format=rawxml";
2122

23+
public PolicyClient(IHttpClientFactory httpClientFactory) : base(httpClientFactory)
24+
{
25+
}
26+
2227
public async Task<PolicyTemplateResource> GetGlobalServicePolicyAsync(ExtractorParameters extractorParameters)
2328
{
2429
var (azToken, azSubId) = await this.Auth.GetAccessToken();

src/ArmTemplates/Common/API/Clients/Product/ProductsClient.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// --------------------------------------------------------------------------
55

66
using System.Collections.Generic;
7+
using System.Net.Http;
78
using System.Threading.Tasks;
89
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
@@ -22,7 +23,10 @@ public class ProductsClient : ApiClientBase, IProductsClient
2223
readonly IProductDataProcessor productDataProcessor;
2324
readonly IProductApiDataProcessor productApiDataProcessor;
2425

25-
public ProductsClient(IProductDataProcessor productDataProcessor, IProductApiDataProcessor productApiDataProcessor)
26+
public ProductsClient(
27+
IHttpClientFactory httpClientFactory,
28+
IProductDataProcessor productDataProcessor,
29+
IProductApiDataProcessor productApiDataProcessor): base(httpClientFactory)
2630
{
2731
this.productDataProcessor = productDataProcessor;
2832
this.productApiDataProcessor = productApiDataProcessor;

src/ArmTemplates/Common/API/Clients/Tags/TagClient.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// --------------------------------------------------------------------------
55

66
using System.Collections.Generic;
7+
using System.Net.Http;
78
using System.Threading.Tasks;
89
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
@@ -21,7 +22,7 @@ public class TagClient : ApiClientBase, ITagClient
2122

2223
readonly IApisClient apisClient;
2324

24-
public TagClient(IApisClient apisClient)
25+
public TagClient(IHttpClientFactory httpClientFactory, IApisClient apisClient): base(httpClientFactory)
2526
{
2627
this.apisClient = apisClient;
2728
}

src/ArmTemplates/Extractor/Utilities/AzureCliAuthenticator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class AzureCliAuthenticator
1919
string internalAzToken;
2020
string internalAzSubscriptionId;
2121

22-
public async Task<(string azToken, string azSubscriptionId)> GetAccessToken()
22+
public virtual async Task<(string azToken, string azSubscriptionId)> GetAccessToken()
2323
{
2424
var tokenTimeout = DateTime.Now;
2525

src/ArmTemplates/Extractor/Utilities/DataProcessors/IdentityProviderProcessor.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
using System.Collections.Generic;
77
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Extensions;
88
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Templates.IdentityProviders;
9-
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Templates.Products;
109
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Extractor.Models;
1110
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Extractor.Utilities.DataProcessors.Absctraction;
1211

src/ArmTemplates/ServiceExtensions.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Extractor.Utilities.DataProcessors.Absctraction;
3434
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Extractor.Utilities.DataProcessors;
3535
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.IdentityProviders;
36+
using Microsoft.Extensions.DependencyInjection.Extensions;
37+
using Microsoft.Extensions.Http;
3638

3739
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates
3840
{
@@ -50,7 +52,8 @@ public static void AddArmTemplatesServices(this IServiceCollection services, ILo
5052
});
5153

5254
services.AddScoped<FileReader>();
53-
55+
services.AddHttpClient();
56+
services.RemoveAll<IHttpMessageHandlerBuilderFilter>();
5457
SetupCommands(services);
5558
SetupExecutors(services);
5659
SetupApiClients(services);

0 commit comments

Comments
 (0)