Фоновое задание запуска Hangfire с пользовательским контекстом - PullRequest
1 голос
/ 25 сентября 2019

У меня есть приложение, с несколькими арендаторами.Я хочу создать фоновую работу в контексте пользователя, но не могу найти хороший способ реализовать это.Я объясню немного мою архитектуру.Я использую интерфейс ICurrentUser, который содержит идентификатор пользователя.В классе запуска я регистрирую в качестве области видимости в IoC класс WebUser, который реализует ICurrentUser, этот класс получает HttpContext и извлекает сведения о пользователе из утверждений.

Я выполняю фоновое задание, а ICurrentUser.UserID является нулевым, как и ожидалось, поскольку зависаниене имеет httpcontext.

Я решаю эту проблему, создавая свои фоновые задачи с помощью метода, который принимает ICurrentUser в качестве первого аргумента, затем внутри тела метода, я устанавливаю свой «CurrentUser» для UnitOfWork (и AppServices) и начинаю выполнение задачи, проблемаПри таком подходе мне приходится повторять этот код для каждой фоновой задачи и передавать в него CurrentUser.

Мой вопрос, как можно добиться следующего.Или, может быть, вы можете предложить другие решения для этого.

  1. Как передать свой CurrentUser в JobActivator, чтобы заказать настройку пользовательского контекста до разрешения всех служб.

Например, это может выглядеть так:

BackgroundJob.Enqueue<MySvc>(UserContext, mysvc=>mysvc.Run());

Я читал источники и действительно не нашел точек расширения для реализации этого.

Любая помощь очень ценится.

...