Я работаю над службой RESTful веб-API, которая по запросу должна выполнять задачу. Мы используем Hangfire для выполнения этой задачи как задания и в случае сбоя попытаемся повторить задание до 10 раз.
Если задание в конечном итоге завершится успешно, я хочу запустить дополнительное задание (чтобы отправить событие в другую службу). Если задание завершается с ошибкой даже после всех повторных попыток, я хочу запустить другое дополнительное задание (чтобы отправить событие сбоя в другую службу).
Однако я не могу понять, как это сделать. Я создал следующий атрибут JobFilterAttribute:
public class HandleEventsAttribute : JobFilterAttribute, IElectStateFilter
{
public IBackgroundJobClient BackgroundJobClient { get; set; }
public void OnStateElection(ElectStateContext context)
{
var failedState = context.CandidateState as FailedState;
if (failedState != null)
{
BackgroundJobClient.Enqueue<MyJobClass>(x => x.RunJob());
}
}
}
Единственная проблема, с которой я столкнулся, — это внедрение IBackgroundJobClient в этот атрибут. Я не могу передать его как свойство атрибуту (я получаю сообщение об ошибке «Не удается получить доступ к нестатическому полю backgroundJobClient в статическом контексте»). Мы используем autofac для внедрения зависимостей, и я пытался выяснить, как использовать внедрение свойств, но я в недоумении. Все это приводит меня к мысли, что я, возможно, на ложном пути.
Я думаю, что запуск некоторого дополнительного кода очистки в случае сбоя задания Hangfire является довольно распространенным шаблоном. Как это делает большинство людей?
Спасибо за помощь. Дайте мне знать, если есть какие-либо дополнительные сведения, которые я могу предоставить.