Проблема здесь заключается в том, что Blazor и .NET MAUI обрабатывают HttpClient по-разному. В Blazor мы можем использовать IHttpClientFactory, но в .NET MAUI рекомендуемый подход — создать HttpClient внутри класса обслуживания. См. документ Microsoft: https://learn.microsoft.com/en-us/dotne ... ent-object
Тогда мой вопрос: как спроектировать мой ApiClient так, чтобы его можно было использовать как в приложениях .NET MAUI, так и в приложениях Blazor и получать HttpClient способом, подходящим для платформы.
Я могу придумать один подход, хотя не уверен, что он хороший. Я просто передаю IHttpClientFactory, который я внедряю в свой DI-контейнер, вместе со значением bool, указывающим, является ли приложение мобильным (.NET MAUI) приложением или нет. Если приложение является приложением Blazor, то есть для isMobile установлено значение false, я использую IHttpClientFactory для обработки HttpClient.
А если для isMobile установлено значение true, я использую HttpClient, объявленный локально.
Код: Выделить всё
public class MyApiClient
{
HttpClient _client;
HttpClientFactory _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 IHttpCilentFactory
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... mapiclient
Мобильная версия