Ich habe Basisklassen für POCO-Objekte erstellt und verwendet und dachte, dass das Erstellen und Verwenden dieser Klassen in Diensten nicht so unterschiedlich sein sollte.
Ich habe meine Basisklasse erstellt und sie in ein NuGet-Paket umgewandelt. Die Basisklasse ist zu diesem Zeitpunkt recht einfach und sieht in etwa so aus:
Code: Select all
public class ApiServiceBase
{
IHttpClientFactory _httpFactory;
public ApiServiceBase(IConfiguration config, IHttpClientFactory httpFactory)
{
// Read settings from config and inject HttpClientFactory
_httpFactory = httpFactory;
}
public async Task GetUserAccount()
{
// Simple API call that returns User account for current user
}
public async Task GetAsync(string url)
{
// Code that handles read operation logic
}
public async Task PostAsync(string url, TRequest data)
{
// Code that handles write operation logic
}
}
Code: Select all
public class ApiService : ApiServiceBase, IApiService
{
public ApiService(IConfiguration config, IHttpClientFactory httpFactory) : base(config, httpFactory)
{
}
public async Task GetSomeData()
{
var data = await GetAsync("/myendpoint"); // This GetAsync() method is in ApiServiceBase
return data;
}
}
Code: Select all
...
builder.Services.AddSingleton();
...
Im Beispiel hier zeige ich, wie ich es in meinem ViewModel mache für meine Homepage in meiner .NET MAUI-App:
Code: Select all
public partial class HomeViewModel : BaseViewModel
{
private readonly IApiService _myApi;
public HomeViewModel(IApiService myApi)
{
_myApi = myApi;
}
internal async Task InitAsync()
{
var data = await _myApi.GetSomeData();
}
}
Wenn ich meine Client-App ausführe, erhalte ich keine Fehlermeldungen, aber sie scheint einfach da zu bleiben und nichts zu tun. Es stürzt nicht ab und wirft keine Fehler aus, aber ich erreiche nie meine Haltepunkte, an denen ich die GetSomeData()-Methode in meinem ApiService aufrufe.
Ich habe zwei Fragen:
- Was fehlt mir bisher, sodass meine Client-App einfach hängt, ohne abzustürzen?
- Ich möchte auch eine Schnittstelle für ApiServiceBase erstellen. Bei meinen ersten Versuchen wurde mir immer wieder mitgeteilt, dass ApiService die in ApiServiceBase enthaltenen Methoden nicht implementiert. Es sagt mir zum Beispiel so etwas wie „ApiService implementiert die GetUserAccount()-Methode nicht, die sich in ApiServiceBase befindet und auch in der IApiServiceBase-Schnittstelle referenziert wird.
Mobile version