我有一些方法,其中有一些方法我想成为重复工作。
我知道我可以在我的Startup.cs中使用hangfire,例如:
RecurringJob.AddOrUpdate(() => Console.WriteLine("I'm a recurring job"), Cron.Minutely);
但问题是如何在这里使用我的服务?我应该在某种程度上使用(依赖注入吗?)还是在其他地方?
也许我应该将一些cron值放到appsettings.json?
答案 0 :(得分:5)
你的意思是这样吗?
RecurringJob.AddOrUpdate<IAlertService>(x =>
x.SendAlerts(emailSettings, link), Cron.MinuteInterval(1));
答案 1 :(得分:1)
这里是如何从启动文件调用 hangfire 服务的方法。就我而言,我将 IMediator 作为我的服务的构造函数。您可以在 AddTransient 中添加一个或多个其他内容。
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages()
.AddRazorRuntimeCompilation()
.AddMvcOptions(options => options.EnableEndpointRouting = false);
serviceCollection.AddTransient<INotificationSchedulerService>
(
serviceProvider => new NotificationSchedulerService
(
serviceProvider.GetService<IMediator>()
)
);
services.AddHangfire(x => x.UseSqlServerStorage("Server=SQLEx\\SQLSERVER2019;Database=Tempdatabase;User ID=sa;Password=xuz@de5234;MultipleActiveResultsets=true"));
services.AddHangfireServer();
}
public void Configure(IApplicationBuilder applicationBuilder, IWebHostEnvironment hostEnvironment)
{
RecurringJob.AddOrUpdate<INotificationSchedulerService>(x => x.ScheduleLikeNotifications(),"*/2 * * * *");
}
}
答案 2 :(得分:0)
我参加这个派对已经晚了一年,在找到Hangfire相关的东西的同时偶然发现了这个问题,我想我会回答,因为问题没有答案。
您绝对可以在Hangfire中使用依赖注入,而无需依赖默认构造函数或在您的类中实例化。
您可以继承JobActivator
并覆盖ActivateJob(Type)
方法,而您的自定义实施使用IServiceProvider
。
public class DependencyJobActivator : JobActivator
{
private readonly IServiceProvider _serviceProvider;
public DependencyJobActivator(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public override object ActivateJob(Type jobType) {
return _serviceProvider.GetService(jobType);
}
}
然后告诉Hangfire在Startup类中使用您的自定义实现&#39; Configure
方法。
public void Configure(IApplicationBuilder app, IServiceProvider serviceProvider)
{
app.UseHangfireDashboard();
app.UseHangfireServer(new BackgroundJobServerOptions { Activator = new DependencyJobActivator(serviceProvider) });
app.UseMvc();
}
上阅读更多内容
答案 3 :(得分:-2)
我遇到的篝火的缺点是设置它的复杂性。它需要很少的额外表来设置它才能工作。我希望你在数据库中为它创建表。请看这个如何获得经常性的工作.- HangFire recurring task data。我认为这对于排队工作或后台工作非常有用,但对于重复工作, 我建议去 Quartz.net 。它不需要这样的设置,也很容易集成。到目前为止没有问题,它有很好的CRON支持。示例 - https://www.mikesdotnetting.com/article/254/scheduled-tasks-in-asp-net-with-quartz-net