Hangfire 依赖注入 ASP.NET 核心:在处理 hangfire 作业时注入不同的对象

Hangfire dependency injection with ASP.NET core: inject different objects when processing a hangfire Job

我有一个使用标准 .net 依赖注入的 asp.net 5 网络应用程序。据我了解,开箱即用 Hangfire 将使用与 MVC 将用于控制器等的相同依赖项来实例化作业。我想在实例化作业时注入不同的依赖项。我该怎么做?

例如一些 类 依赖于 IHttpContextAccessor 所以我想提供一种在 hangfire 作业中使用的替代方法,它将从序列化作业参数中获取其状态。

我看到一些关于复杂事物的讨论 here 听起来像我需要的......但我喜欢一个简单的例子:-)

我最终没有使用依赖注入来实现这种不同的行为。相反,我更改了使用 IHttpContentAccessor 的 classes,以从我的 Hangfire 作业方法中的状态集派生 'tenant'。

  • 在我的作业方法中,我首先根据作业方法的参数在 'Scoped' 对象中设置租户
  • 在使用 IHttpContentAccessor 从当前请求中获取信息的 class 中,我首先查看当前是否有获取租户信息的请求,如果没有,我会检查那个作用域对象仅在 hangfire 作业期间设置。
  • 在我的工作方法中,我不使用构造函数依赖注入。相反,我在作业方法中使用服务定位器(反)模式。这意味着我可以先设置租户状态,然后再请求依赖它的对象。