[英]Add a custom job factory in quartz .net 5
您好,我创建了一个自定义作业工厂,如下所示
class JobFactory : IJobFactory
{
protected readonly IServiceProvider _container;
public JobFactory(IServiceProvider container)
{
_container = container;
}
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
var job = (IJob)_container.GetService(bundle.JobDetail.JobType)!;
var logTime = _container.GetService<ILogTime>()!;
return new JobLogDecorator(job,logTime);
}
public void ReturnJob(IJob job)
{
(job as IDisposable)?.Dispose();
}
}
JobLogDecorator 是一个简单的类,用于记录装饰作业所用的时间
public class JobLogDecorator : IJob
{
private readonly IJob _decorated;
private readonly ILogTime _log;
public JobLogDecorator (IJob decorated, ILogTime log)
{
_decorated = decorated;
_log = log;
}
public async Task Execute(IJobExecutionContext context)
{
var jobName = context.JobDetail.Key.Name;
var sw = Stopwatch.StartNew();
await _decorated.Execute(context);
_log.Log(sw.ElapsedMilliseconds, jobName);
}
}
现在我想注册石英和这个工作工厂。 在启动时我已经注册,但我不明白如何注册我的自定义作业工厂
services.AddQuartz(q =>
{
q.SchedulerId = "MyJob";
q.SchedulerName = "MyJob";
//i try to add this but i cannot hit the JobLogDecorator when the job is running
q.UseJobFactory<JobFactory>();
//i cannot understand how to configure this method
q.UseMicrosoftDependencyInjectionJobFactory();
});
services.AddQuartzHostedService(options =>
{
options.WaitForJobsToComplete = true;
});
结果我无法点击/调用 JobFactory ,JobLogDecorator 我也注册了services.AddSingleton<JobFactory>();
我发现当您要注册您的自定义工厂时的问题,您必须按照以下步骤操作
q.UseJobFactory<JobFactory>();
q.UseMicrosoftDependencyInjectionJobFactory();
services.AddTransient<MaintenanceJob>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.