Утилизировать простую форсунку asyn c в жизненном цикле Hangfire Jobfilter - PullRequest
1 голос
/ 13 января 2020

Я использую Hangfire вместе с простым инжектором. Я хотел бы сделать некоторые записи, если работа не удалась или успешно. Насколько я знаю, OnStateElection это место, чтобы справиться с этим.

Однако, поскольку OnPerforming вызывается до этого метода, моя область действия удаляется. Я основал этот код на шаблоне .

Является ли OnStateElection надежным местом, куда можно перенести утилизацию? Если это так, на какое свойство контекста мне следует положиться перед удалением? OnStateElection вызывается более одного раза за итерацию из того, что я видел.

public class HangfireActivityJobFilter : JobFilterAttribute, IServerFilter, IElectStateFilter
{
    private static readonly AsyncScopedLifestyle Lifestyle = new AsyncScopedLifestyle();

    private readonly Container _container;

    public HangfireActivityJobFilter(Container container)
    {
        _container = container;
    }

    public void OnPerforming(PerformingContext filterContext)
    {
        AsyncScopedLifestyle.BeginScope(_container);
    }

    public void OnPerformed(PerformedContext filterContext)
    {
        var scope = Lifestyle.GetCurrentScope(_container);
        scope?.Dispose();
    }

    public void OnStateElection(ElectStateContext context)
    {
        _container.GetInstance<ILogger>(); // <-- OnPerformed called, scope disposed
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...