【发布时间】:2017-02-13 08:25:40
【问题描述】:
在我的项目中,我必须使用 Quartz,但我不知道我做错了什么。
工作工厂:
public class IoCJobFactory : IJobFactory
{
private readonly IServiceProvider _factory;
public IoCJobFactory(IServiceProvider factory)
{
_factory = factory;
}
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
return _factory.GetService(bundle.JobDetail.JobType) as IJob;
}
public void ReturnJob(IJob job)
{
var disposable = job as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
}
石英扩展:
public static class QuartzExtensions
{
public static void UseQuartz(this IApplicationBuilder app)
{
app.ApplicationServices.GetService<IScheduler>();
}
public static async void AddQuartz(this IServiceCollection services)
{
var props = new NameValueCollection
{
{"quartz.serializer.type", "json"}
};
var factory = new StdSchedulerFactory(props);
var scheduler = await factory.GetScheduler();
var jobFactory = new IoCJobFactory(services.BuildServiceProvider());
scheduler.JobFactory = jobFactory;
await scheduler.Start();
services.AddSingleton(scheduler);
}
}
当我尝试运行我的作业(类有依赖注入)时,我总是得到异常,因为:
_factory.GetService(bundle.JobDetail.JobType) as IJob;
始终为空。
我的班级实现 IJob 并在 startup.cs 中添加:
services.AddScoped<IJob, HelloJob>();
services.AddQuartz();
和
app.UseQuartz();
我使用标准的 .net Core 依赖注入:
using Microsoft.Extensions.DependencyInjection;
【问题讨论】:
-
您是否在 DI 中安装了作业?
-
是的,我只有一份工作,所以我通过
services.AddScoped<IJob, HelloJob>();安装了它
标签: c# .net asp.net-core scheduler quartz.net