首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hangfire中的JobActivator不为每次运行的RecurringJob安装DataContext

Hangfire中的JobActivator不为每次运行的RecurringJob安装DataContext
EN

Stack Overflow用户
提问于 2020-07-20 12:30:39
回答 1查看 443关注 0票数 1

我使用HangFireEntityFramework来执行经常性工作。

代码语言:javascript
复制
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);
}

活化剂:

代码语言:javascript
复制
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的初始化

代码语言:javascript
复制
public EveryMinute(DataContext dataContext,RepositoryA repositoryA)
{
  _dataContext = dataContext;
  _repositoryA = repositoryA;
}

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

代码语言:javascript
复制
public async Task ExecuteAsync()
{
  var dbItem = _dataContext.Items.Single(x => x.Id == 1);
  //dbItem.StateProperty property is old
}

它看起来像项目或DataContext是‘缓存’从创造就业(申请开始)。因为当我用

代码语言:javascript
复制
public EveryMinute()
{
    _dataContext = new DataContext();
    _repositoryA = new RepositoryA(_dataContext);
}

效果很好。

我是不是用错了活化剂?或者如何为每个依赖项注入调用指定需要新实例DataContext

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-24 09:58:53

Hangfire的就业机会分享活化剂的实例。

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

可以指定每个作业的依赖项具有实例。

代码语言:javascript
复制
containerBuilder.RegisterType<DataContext>().InstancePerBackgroundJob();

然后在配置中

代码语言:javascript
复制
GlobalConfiguration.Configuration.UseAutofacActivator(containerBuilder.Build())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62995440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档