Проблема здесь заключается в том, что Blazor и .NET MAUI обрабатывают HttpClient по-разному. В Blazor мы можем использовать IHttpClientFactory, но в .NET MAUI рекомендуемый подход — создать HttpClient внутри класса обслуживания. См. документ Microsoft: https://learn.microsoft.com/en-us/dotne ... ent-object
Тогда мой вопрос: как спроектировать MyApiClient так, чтобы его можно было использовать как в приложениях .NET MAUI, так и в приложениях Blazor и получать HttpClient способом, подходящим для платформы.
Я могу придумать один подход, хотя не уверен, что он хороший. Я просто передаю IHttpClientFactory, который я внедряю в свой контейнер DI, вместе со значением bool, указывающим, является ли приложение мобильным (.NET MAUI) приложением или нет.
Если приложение является приложением Blazor, то есть для isMobile установлено значение false, я использую IHttpClientFactory для обработки HttpClient.
А в случае приложений .NET MAUI для isMobile установлено значение true, IHttpClientFactory будет иметь значение null, и я бы использовал HttpClient, объявленный локально.
Код: Выделить всё
public class MyApiClient
{
HttpClient _client;
IHttpClientFactory _httpClientFactory;
public MyApiClient(IHttpClientFactory httpClientFactory, bool isMobile)
{
if(isMobile && httpClientFactory is null)
_client = new HttpClient();
else
_httpClientFactory = httpClientFactory;
}
public async Task GetAsync(string url)
{
if(isMobile)
{
// Use _client declared at class level
}
else
{
using(var client = _httpClientFactory.CreateClient("MyApiClient");
{
// Use the client managed by IHttpClientFactory
}
}
}
}
Я буду признателен за любые ваши предложения. Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/798 ... mapiclient
Мобильная версия