DI 范围的范围是什么 - .NET Core 中的 Hangfire

edd*_*P23 8 hangfire asp.net-core

想象一下,在 ASP.NET Core 中我注册了一个依赖项,如下Scoped所示:

IServiceCollection services = ...
services.AddScoped<IEmailService, EmailService>();
Run Code Online (Sandbox Code Playgroud)

然后我知道对于每个 HTTP 请求,scope都会创建一个新的请求,并且Email会重用一个新的服务实例。此外,同样的情况scope将在请求的生命周期内持续存在。

现在,假设我添加了一个 Hangfire 后台作业,如下所示:

RecurringJob.AddOrUpdate<IServiceA>("DoA", s => s.DoA(), Cron.Daily());
Run Code Online (Sandbox Code Playgroud)

在哪里

public class ServiceA: IServiceA {
    public ServiceA(IEmailService emailService) { ... }
    public void DoA() { ... }
}
Run Code Online (Sandbox Code Playgroud)

我想了解scopedhangfire工作术语中的含义,默认情况下,hangfire

  • 对所有作业和运行使用单一范围
  • 为每个作业创建单独的作用域,但同一作业的不同运行共享作用域
  • 为任何作业的每次运行创建单独的范围

有关如何配置它的解释的奖励积分。

ben*_*lum 2

正如 Panagiotis Kanavos 在上面发表的评论(但为了使作为可接受的答案更加明显):

如果您只需调用DI 配置,这似乎是开箱即用的。无论使用什么 DI 容器,AddHangFire每个执行都包装在一个作用域中。但这没有记录在任何地方