【发布时间】:2021-03-26 09:33:40
【问题描述】:
因此,Hangfire 提供了IRecurringJobManager,我们可以使用它来添加重复作业,但它只支持注入一项服务,当我需要访问多项服务时,我找不到任何示例。
假设我有两个这样的注册服务:
services.AddTransient<Service1>();
services.AddTransient<Service2>();
我想在我的经常性工作中同时使用它们。 理想情况下,我想做的是:
recurringJobManager.AddOrUpdate<Service1, Service2>("my-job", (service1, service2) =>
{
// do something
}, Cron.Daily);
但这是不可能的。
这样做的正确方法是什么?我应该注入 IServiceProvider 吗?像这样?
recurringJobManager.AddOrUpdate<IServiceProvider>("my-job", (serviceProvider) =>
{
var service1 = serviceProvider.GetRequiredService<Service1>();
var service2 = serviceProvider.GetRequiredService<Service2>();
// do something
}, Cron.Daily);
这行得通吗? 编辑:不,因为我不能在里面使用语句体
我有点困惑,因为文档没有涵盖这些情况。
【问题讨论】:
-
我不使用HangFire,但我认为您需要使用DI并配置JobActivators。见docs.hangfire.io/en/latest/background-methods/…
-
HangFire.AspNetCore 已经提供了一个默认的 JobActivator,它使用 IServiceProvider 来解析服务github.com/HangfireIO/Hangfire/blob/master/src/… 但
AddOrUpdate方法只支持一种类型。
标签: c# asp.net-core hangfire