我正在一个ASP.net core (2.2)应用程序中使用基于内存的Hangfire(1.6.21)。在Startup.cs
文件中,我正在将一个服务配置为单例:
services.AddSingleton<IXXXService, XXXService>(); // In ConfigureServices(...)
同时使用以下代码初始化Hangfire:
app.UseHangfireServer(); // In Configure(...)
这里是
XXXService
简化后的代码:public class XXXService : IXXXService
{
public ExternalAPIService()
{
Console.WriteLine("xxx");
}
public void QueueRequest(Guid requestId)
{
BackgroundJob.Enqueue(() => this.AnalyzeRequest(requestId));
}
public async Task AnalyzeRequest(Guid requestId)
{
Console.WriteLine("Analyzing request...");
}
}
问题在于,虽然
XXXService
被定义为单例模式——确实只有通过连续请求才会创建一次,但当最终调用AnalyzeRequest
时,它会被Hangfire重新创建。我该如何将Hangfire路由到由ASP默认DI管理的单例对象?
IBackgroundJobClient
吗?!文档 明确指出BackgroundJob
是IBackgroundJobClient
的一个包装器。 - Tseng