Я создал и использовал базовые классы для объектов POCO и подумал, что создание и использование их в службах не должно сильно отличаться.
Я создал свой базовый класс и превратил его в пакет NuGet. Базовый класс на данный момент довольно прост и выглядит примерно так:
Код: Выделить всё
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
}
}
Код: Выделить всё
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;
}
}
Код: Выделить всё
...
builder.Services.AddSingleton();
...
Код: Выделить всё
public partial class HomeViewModel : BaseViewModel
{
private readonly IApiService _myApi;
public HomeViewModel(IApiService myApi)
{
_myApi = myApi;
}
internal async Task InitAsync()
{
var data = await _myApi.GetSomeData();
}
}
Когда я запускаю свое клиентское приложение, я не получаю никаких ошибок, но кажется, что оно просто сидит и ничего не делает. Он не вызывает сбоев и ошибок, но я никогда не достигаю точек останова, когда я вызываю метод GetSomeData() в своем ApiService.
У меня есть два вопроса:
- Чего мне не хватает, чтобы мое клиентское приложение просто зависало без сбоев?
- Я также хочу создать интерфейс для ApiServiceBase. В моих первоначальных попытках он постоянно сообщал мне, что ApiService не реализует методы, находящиеся в ApiServiceBase. Например, он сообщает мне, что что-то вроде ApiService не реализует метод GetUserAccount(), который находится в ApiServiceBase и на который также ссылаются в интерфейсе IApiServiceBase.
Подробнее здесь: https://stackoverflow.com/questions/798 ... lient-apps
Мобильная версия