53 lines
1.7 KiB
C#
53 lines
1.7 KiB
C#
using DD.Persistence.Client.Clients.Interfaces.Refit;
|
||
using DD.Persistence.Client.Helpers;
|
||
using Microsoft.Extensions.Configuration;
|
||
using Microsoft.Extensions.Logging;
|
||
using Refit;
|
||
using System.Configuration;
|
||
using System.Text.Json;
|
||
|
||
namespace DD.Persistence.Client;
|
||
|
||
/// <summary>
|
||
/// Фабрика, которая создает refit-клиентов
|
||
/// </summary>
|
||
/// <typeparam name="T"></typeparam>
|
||
public class RefitClientFactory<T> : IRefitClientFactory<T> where T : IRefitClient
|
||
{
|
||
private HttpClient client;
|
||
private RefitSettings refitSettings;
|
||
|
||
/// <inheritdoc/>
|
||
public RefitClientFactory(IConfiguration configuration, ILogger<IRefitClientFactory<T>> logger, HttpClient client)
|
||
{
|
||
//this.client = factory.CreateClient();
|
||
this.client = client;
|
||
|
||
var baseUrl = configuration.GetSection("ClientUrl").Get<string>();
|
||
if (String.IsNullOrEmpty(baseUrl))
|
||
{
|
||
var exception = new SettingsPropertyNotFoundException("В настройках конфигурации не указан адрес Persistence сервиса.");
|
||
|
||
logger.LogError(exception.Message);
|
||
|
||
throw exception;
|
||
}
|
||
client.BaseAddress = new Uri(baseUrl);
|
||
|
||
JsonSerializerOptions JsonSerializerOptions = new()
|
||
{
|
||
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
|
||
PropertyNameCaseInsensitive = true
|
||
};
|
||
refitSettings = new(new SystemTextJsonContentSerializer(JsonSerializerOptions));
|
||
}
|
||
/// <summary>
|
||
/// создание клиента
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public T Create()
|
||
{
|
||
return RestService.For<T>(client, refitSettings);
|
||
}
|
||
}
|