如何在启动时使用 HangFire 创建类似 cron 的作业?

How to create a cron like job using HangFire at startup?

我有一个服务class,它有一个类似

的方法
public void BackgroundJob(string cronrule)
{
    RecurringJob.AddOrUpdate("somejob", () => FetchCallHistoryAsync(), cronrule);
}

我想在启动时启动作业,像这样

public void ConfigureServices(IServiceCollection services)
{
    ...
    new MyClass().BackgroundJob("10 * * * *")
}

但是我的 class 依赖于其他几个服务,我不知道如何从 Startup.cs 实例化它,知道吗?

好的,我找到办法了

对于任何需要在启动时实例化服务的情况,您可以在 ConfigureServices(IServiceCollection services) 注册它,然后在 Configure(YourService yserv)

中注入它

对于我的特殊情况,我创建了一个 CrontabService

namespace MyApp
{
    public class CrontabService
    {
        private DependentService D;
        public CrontabService(DependentService d)
        {
              D = d
        }

        public Start()
        {
              RecurringJob.AddOrUpdate("some-id", () => D.Job(), "*/15 * * * *");
        }
    }
}

这样我所有的 crontab 作业都在同一个服务上。

然后我从Startup.cs::Configure

开始
// Startup.cs
     public void ConfigureServices(IServiceCollection services)
     {
         ...
         services.AddSingleton<DepedentService>();
         services.AddSingleton<CrontabService>();
      }
...
     public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider, CrontabService cron)
     {
          ...
          cron.Start();
          ...
     }
...