Enhance ReC.Client library with new features and cleanup
- Added comprehensive XML documentation for `DependencyInjection` and `ReCClient` classes to improve code readability. - Introduced overload for `AddRecClient` to allow flexible `HttpClient` configuration. - Added static `BuildStaticClient` and `Create` methods for simplified client instantiation. - Marked synchronous `InvokeRecAction` method as obsolete to encourage asynchronous usage. - Updated `ReC.Client.csproj`: - Added `<DocumentationFile>` property for XML doc generation. - Downgraded `Microsoft.Extensions.Http` to version 8.0.0. - Removed `System.Text.Json` package reference. - Removed `System.Text.Json` dependency from `ReCClient.cs`. - Generated unique `HttpClient` name for `ReCClient` instances. - Performed general code cleanup and improved method remarks.
This commit is contained in:
parent
91c8b98f44
commit
5f9e716ca6
@ -6,8 +6,17 @@ using System.Net.Http;
|
|||||||
|
|
||||||
namespace ReC.Client
|
namespace ReC.Client
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Provides extension methods for setting up the ReC client in an <see cref="IServiceCollection"/>.
|
||||||
|
/// </summary>
|
||||||
public static class DependencyInjection
|
public static class DependencyInjection
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Adds and configures the <see cref="HttpClient"/> for the <see cref="ReCClient"/> to the specified <see cref="IServiceCollection"/>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="services">The <see cref="IServiceCollection"/> to add the services to.</param>
|
||||||
|
/// <param name="apiUri">The base URI of the ReC API.</param>
|
||||||
|
/// <returns>An <see cref="IHttpClientBuilder"/> that can be used to configure the client.</returns>
|
||||||
public static IHttpClientBuilder AddRecClient(this IServiceCollection services, string apiUri)
|
public static IHttpClientBuilder AddRecClient(this IServiceCollection services, string apiUri)
|
||||||
{
|
{
|
||||||
return services.AddHttpClient(ReCClient.ClientName, client =>
|
return services.AddHttpClient(ReCClient.ClientName, client =>
|
||||||
@ -16,6 +25,12 @@ namespace ReC.Client
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds and configures the <see cref="HttpClient"/> for the <see cref="ReCClient"/> to the specified <see cref="IServiceCollection"/>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="services">The <see cref="IServiceCollection"/> to add the services to.</param>
|
||||||
|
/// <param name="configureClient">An action to configure the <see cref="HttpClient"/>.</param>
|
||||||
|
/// <returns>An <see cref="IHttpClientBuilder"/> that can be used to configure the client.</returns>
|
||||||
public static IHttpClientBuilder AddRecClient(this IServiceCollection services, Action<HttpClient> configureClient)
|
public static IHttpClientBuilder AddRecClient(this IServiceCollection services, Action<HttpClient> configureClient)
|
||||||
{
|
{
|
||||||
return services.AddHttpClient(ReCClient.ClientName, configureClient);
|
return services.AddHttpClient(ReCClient.ClientName, configureClient);
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net462;net8.0</TargetFrameworks>
|
<TargetFrameworks>net462;net8.0</TargetFrameworks>
|
||||||
|
<DocumentationFile>bin\$(Configuration)\$(TargetFramework)\$(MSBuildProjectName).xml</DocumentationFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(TargetFramework)' != 'net462'">
|
<PropertyGroup Condition="'$(TargetFramework)' != 'net462'">
|
||||||
@ -10,8 +11,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.0" />
|
||||||
<PackageReference Include="System.Net.Http" Version="4.3.4" />
|
<PackageReference Include="System.Net.Http" Version="4.3.4" />
|
||||||
<PackageReference Include="System.Text.Json" Version="9.0.11" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
using System.Text.Json;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
|
|
||||||
#if NETFRAMEWORK
|
#if NETFRAMEWORK
|
||||||
using System;
|
using System;
|
||||||
@ -10,23 +9,36 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace ReC.Client
|
namespace ReC.Client
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A client for interacting with the ReC API.
|
||||||
|
/// </summary>
|
||||||
public class ReCClient
|
public class ReCClient
|
||||||
{
|
{
|
||||||
private readonly HttpClient _http;
|
private readonly HttpClient _http;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A unique name for the HttpClient used by the ReCClient.
|
||||||
|
/// </summary>
|
||||||
public static readonly string ClientName = Guid.NewGuid().ToString();
|
public static readonly string ClientName = Guid.NewGuid().ToString();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="ReCClient"/> class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="httpClientFactory">The factory to create HttpClients.</param>
|
||||||
public ReCClient(IHttpClientFactory httpClientFactory)
|
public ReCClient(IHttpClientFactory httpClientFactory)
|
||||||
{
|
{
|
||||||
_http = httpClientFactory.CreateClient(ClientName);
|
_http = httpClientFactory.CreateClient(ClientName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// POST api/RecAction/invoke/{profileId}
|
/// Asynchronously invokes a ReC action for a specific profile.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="profileId"></param>
|
/// <remarks>
|
||||||
/// <param name="cancellationToken"></param>
|
/// This method sends a POST request to the <c>api/RecAction/invoke/{profileId}</c> endpoint.
|
||||||
/// <returns>True if the request was successful, false otherwise</returns>
|
/// </remarks>
|
||||||
|
/// <param name="profileId">The ID of the profile to invoke the action for.</param>
|
||||||
|
/// <param name="cancellationToken">A token to cancel the asynchronous operation.</param>
|
||||||
|
/// <returns>A <see cref="Task{TResult}"/> that represents the asynchronous operation. The task result is <see langword="true"/> if the request was successful; otherwise, <see langword="false"/>.</returns>
|
||||||
public async Task<bool> InvokeRecActionAsync(int profileId, CancellationToken cancellationToken = default)
|
public async Task<bool> InvokeRecActionAsync(int profileId, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var resp = await _http.PostAsync($"api/RecAction/invoke/{profileId}", content: null, cancellationToken);
|
var resp = await _http.PostAsync($"api/RecAction/invoke/{profileId}", content: null, cancellationToken);
|
||||||
@ -34,10 +46,14 @@ namespace ReC.Client
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// POST api/RecAction/invoke/{profileId} (Synchronous version)
|
/// Synchronously invokes a ReC action for a specific profile.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="profileId"></param>
|
/// <remarks>
|
||||||
/// <returns>True if the request was successful, false otherwise</returns>
|
/// This method sends a POST request to the <c>api/RecAction/invoke/{profileId}</c> endpoint.
|
||||||
|
/// This is the synchronous version of <see cref="InvokeRecActionAsync(int, CancellationToken)"/>.
|
||||||
|
/// </remarks>
|
||||||
|
/// <param name="profileId">The ID of the profile to invoke the action for.</param>
|
||||||
|
/// <returns><see langword="true"/> if the request was successful; otherwise, <see langword="false"/>.</returns>
|
||||||
[Obsolete("Use InvokeRecActionAsync instead to avoid potential deadlocks and improve performance.")]
|
[Obsolete("Use InvokeRecActionAsync instead to avoid potential deadlocks and improve performance.")]
|
||||||
public bool InvokeRecAction(int profileId)
|
public bool InvokeRecAction(int profileId)
|
||||||
{
|
{
|
||||||
@ -54,6 +70,14 @@ namespace ReC.Client
|
|||||||
private static IServiceProvider Provider = null;
|
private static IServiceProvider Provider = null;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Configures and builds the static <see cref="IServiceProvider"/> for creating <see cref="ReCClient"/> instances.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// This method should only be called once during application startup.
|
||||||
|
/// </remarks>
|
||||||
|
/// <param name="apiUri">The base URI of the ReC API.</param>
|
||||||
|
/// <exception cref="InvalidOperationException">Thrown if the static provider has already been built.</exception>
|
||||||
public static void BuildStaticClient(string apiUri)
|
public static void BuildStaticClient(string apiUri)
|
||||||
{
|
{
|
||||||
if(Provider != null)
|
if(Provider != null)
|
||||||
@ -66,6 +90,11 @@ namespace ReC.Client
|
|||||||
Provider = Services.BuildServiceProvider();
|
Provider = Services.BuildServiceProvider();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new <see cref="ReCClient"/> instance using the statically configured provider.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A new instance of the <see cref="ReCClient"/>.</returns>
|
||||||
|
/// <exception cref="InvalidOperationException">Thrown if <see cref="BuildStaticClient(string)"/> has not been called yet.</exception>
|
||||||
public static ReCClient Create()
|
public static ReCClient Create()
|
||||||
{
|
{
|
||||||
if (Provider == null)
|
if (Provider == null)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user