Die Herausforderung hierbei besteht darin, dass Blazor und .NET MAUI HttpClient unterschiedlich behandeln. In Blazor können wir IHttpClientFactory verwenden, aber in .NET MAUI besteht der empfohlene Ansatz darin, den HttpClient innerhalb der Serviceklasse zu erstellen – siehe Microsoft-Dokument: https://learn.microsoft.com/en-us/dotne ... ent-object
Meine Frage ist dann, wie man entwirft MyApiClient, damit es sowohl in .NET MAUI- als auch in Blazor-Apps verwendet werden kann und HttpClient auf eine für die Plattform richtige Weise empfängt.
Hier ist ein Ansatz, der mir einfällt, obwohl ich nicht sicher bin, ob er gut ist. Ich übergebe einfach die IHttpClientFactory, die ich in meinen DI-Container einfüge, zusammen mit einem bool-Wert, der angibt, ob es sich bei der App um eine mobile – .NET MAUI – App handelt oder nicht.
Wenn es sich bei der App um eine Blazor-App handelt, d HttpClient.
Und im Fall von .NET MAUI-Apps ist isMobile auf true gesetzt, IHttpClientFactory wäre null und ich würde den lokal deklarierten HttpClient verwenden.
Code: Select all
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
}
}
}
}
Ich würde mich über Ihre Vorschläge freuen. Danke!
Mobile version