假设在ASP.NET Core中,我像下面这样注册一个被称为
Scoped
的依赖项:IServiceCollection services = ...
services.AddScoped<IEmailService, EmailService>();
我知道每个HTTP请求都会创建一个新的作用域(scope)
,并且将重复使用电子邮件(Email)
服务的新实例。此外,同一作用域(scope)
将在请求的生命周期内保持不变。
现在,想象我添加了一个Hangfire后台作业,如下所示:
RecurringJob.AddOrUpdate<IServiceA>("DoA", s => s.DoA(), Cron.Daily());
where
public class ServiceA: IServiceA {
public ServiceA(IEmailService emailService) { ... }
public void DoA() { ... }
}
我想了解在hangfire作业术语中,scoped
是什么意思,默认情况下,hangfire是否会:
- 为所有作业和运行使用一个范围
- 为每个作业创建单独的范围,但同一个作业的不同运行共享范围
- 为任何作业的每次运行都创建单独的范围
额外加分:如何配置它。
AddHangFire
,似乎已经默认提供了这个功能。每个执行都会被包装在一个作用域中,无论使用什么DI容器。尽管如此,这一点还没有被记录在任何地方。 - Panagiotis Kanavos