我有一个 .NET 7 项目,每天创建一个作业,该作业又创建其他作业。主作业存在于一个服务中,子作业各自有自己的服务。是否可以注入已设置为瞬态服务的 IBackgroundJobClient 接口?我注意到在客户端的注释中写着“请为每个操作创建一个状态类的新实例”,我不确定它是否适用于客户端的“创建”方法。
builder.Services.AddTransient<IBackgroundJobClient, BackgroundJobClient>();
public MainJobService(IBackgroundJobClient client)
{
public void CreateJob() {
client.Create<ISubJobService>(myInterface => myInterface.CreateSubJobs());
}
}
public SubJobService(IBackgroundJobClient client)
{
public void CreateSubJobs() {
for (int x; x <10; x++)
{
client.Create<IJobService>(myInterface => myInterface.CreateJob());
}
}
}
从工作的角度来看这并不重要。每个作业都是一个范围 - 这意味着每当您创建一个新作业时,该作业都会通过
CoreBackgroundJobPerformer
激活,并使用 JobActivator
为该作业创建一个新范围。
因此,
BackgroundJobClient
的主要工作是创建稍后将通过 Hangfire Server 激活的作业定义。
您可以在我的其他答案中找到更深入的内容这里