Я пытаюсь создать стороннюю библиотеку для использования API.
Я создал несколько классов, которые разрешают различные вызовы API, например:
public class AccountsEndpoint: IAccountsEndpoint
{
public async Task<Account> GetAsync(id)
{
return await this.BuildUrl(id).GetJsonAsync();
}
//etc...
}
public class NotificationsEndpoint: INotificationsEndpoint
{
public async Task<Notification> SetPrimary(id)
{
return await this.BuildUrl(id).AppendSegment("Primary")
.PostJsonAsync(null, cancellationToken)
.ReceiveJson<Notification>())();
}
}
У меня есть большое количество этих конечных точек, и я хотел бы запустить дополнительный код перед каждым из этих вызовов,
например, если мой токен oauth недействителен, я бы хотел получить новый токен доступа и повторить запрос автоматически.
Я бы предпочел НЕ , чтобы обернуть все вызовы API с помощью такого обработчика, как:
public async Task<Notification> SetPrimary(id)
{
return await new CustomErrorHandler(() =>
this.BuildUrl(id).AppendSegment("Primary")
.PostJsonAsync(null, cancellationToken)
.ReceiveJson<Notification>())()).ExecuteAsync();
}
Если бы я сделал что-то подобное, мне пришлось бы помнить об использовании обработчика ошибок на всех конечных точках, когда я чувствую, что есть лучший способ инвертировать элемент управления. (В качестве альтернативы я мог бы создать фиктивный интерфейс и использовать там логику переноса, но при этом возникают те же проблемы, что и при добавлении вызовов вручную).
Как мне обернуть все вызовы логикой обработчика ошибок?