使用Hangfire和Autofac注入与作业相关的值

时间:2016-07-08 07:48:58

标签: c# asp.net-mvc asp.net-mvc-4 autofac hangfire

我的ASP.NET MVC 4应用程序(.NET 4.0)允许用户下订单。 HttpContext中的当前用户ID和HttpContext.Session中的其他信息用于多种用途,例如作为下订单的人。

我们正在通过Hangfire工作添加自动导入订单。 Hangfire作业没有HttpContext,因此必须以其他方式提供用户ID。我们依赖注入Autofac。

问题:如何将当前用户作为依赖项注入,以便在通过...输入订单时

  1. ...一个Hangfire作业,Autofac解析的所有依赖项根据作业类型获取用户ID(例如“AcmeJobImporter”,“FooJob”)
  2. .. MVC用户界面,使用HttpContext的ID
  3. 解决方案的想法:

    1. 用包装器界面替换HttpContext,例如ICurrentContext。一个实现返回HttpContext的值,其他只使用静态值。

    2. 默认情况下,设置Autofac以返回基于HttpContext的实施。

    3. 在我们的Hangfire JobActivator中,创建一个新的Autofac(child?)容器。将ICurrentContext实现替换为返回作业名称的实现。
    4. 这个解决方案让我很担心,因为它似乎require use of ThreadStatic,可能是not be OK in ASP.NET MVC上下文。有更好的方法吗?我不想将值作为方法参数传递,因为它们遍及整个应用程序。

0 个答案:

没有答案