【发布时间】:2021-07-28 09:23:41
【问题描述】:
您好,我创建了一个自定义作业工厂,如下所示
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>();
【问题讨论】:
-
在配置 Quartz 之前,您是否在 DI
services.AddSingleton<IJobFactory, JobFactory>()中注册了工厂? github.com/quartznet/quartznet/blob/… -
@abdusco 我也试试这个,但我无法调用 JobLogDecorator 和 jobfactory
标签: c# asp.net-core .net-core quartz.net