【问题标题】:JobActivator in Hangfire doesnt instancelize DataContext for each run of RecurringJobHangfire 中的 JobActivator 不会为 RecurringJob 的每次运行实例化 DataContext
【发布时间】:2020-07-20 12:30:39
【问题描述】:

我正在使用 HangFireEntityFramework 进行重复性工作

public void Start(IContainer container)
{
  GlobalConfiguration.Configuration
   .UseColouredConsoleLogProvider(LogLevel.Debug)
   .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
   .UseSimpleAssemblyNameTypeSerializer()
   .UseActivator(new MyActivator(container))
   .UseRecommendedSerializerSettings();

   RecurringJob.AddOrUpdate<EveryMinute>((x) => x.ExecuteAsync(), Cron.Minutely);
}

激活器:

public class MyActivator : JobActivator
{
  private readonly IContainer _container;

  public MyActivator (IContainer container)
  {
    _container = container;
  }

  public override object ActivateJob(Type type)
  {
    return _container.Resolve(type);
  }
}

然后我有 ctor 初始化 DatacontextRepositoryA

public EveryMinute(DataContext dataContext,RepositoryA repositoryA)
{
  _dataContext = dataContext;
  _repositoryA = repositoryA;
}

但是,当我像下面这样每分钟从数据库中检索数据时,我收到了错误的数据(项目在 Hangfire 作业之外由其他应用程序更新)。

public async Task ExecuteAsync()
{
  var dbItem = _dataContext.Items.Single(x => x.Id == 1);
  //dbItem.StateProperty property is old
}

从创建作业(应用程序启动)开始,项目或 DataContext 似乎已被“缓存”。因为当我使用

public EveryMinute()
{
    _dataContext = new DataContext();
    _repositoryA = new RepositoryA(_dataContext);
}

效果很好。

我是不是用错了激活器?或者如何指定每次调用依赖注入需要新实例DataContext

【问题讨论】:

    标签: c# .net entity-framework hangfire hangfire-autofac


    【解决方案1】:

    Hangfire 中的作业共享激活器实例。

    因此我使用了Hangfire Autofac nuget - Hangfire.Autofac

    您可以为依赖项指定每个作业的实例

    containerBuilder.RegisterType<DataContext>().InstancePerBackgroundJob();
    

    然后在配置中

    GlobalConfiguration.Configuration.UseAutofacActivator(containerBuilder.Build())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多