Это кажется довольно простым, но это моя первая попытка создания и использования такого базового класса для службы, и я явно допускаю некоторые ошибки новичка. Я создал и использовал базовые классы для объектов 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();
...
У меня есть два вопроса:
- Чего мне не хватает, чтобы мое клиентское приложение просто зависало без сбоев. Очевидно, что есть проблема с тем, как я это реализовал.
- Я также хочу создать интерфейс для ApiServiceBase. В моих первоначальных попытках он постоянно сообщал мне, что ApiService не реализует методы, находящиеся в ApiServiceBase. Например, он сообщает мне, что что-то вроде ApiService не реализует метод GetUserAccount(), который находится в ApiServiceBase и также упоминается в интерфейсе IApiServiceBase.
Подробнее здесь: https://stackoverflow.com/questions/798 ... lient-apps
Мобильная версия