如何在启动时使用 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();
...
}
...
我有一个服务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();
...
}
...