我如何配置 Quartz.net核心使用依赖注入?我使用标准的.net core依赖机制。在实现类的构造函数中IJob,我需要注入一些依赖项。
您可以使用Quartz.Spi.IJobFactory
接口并实现它。 Quartz 文档指出:
当触发器触发时,与其关联的作业将通过调度程序上配置的 JobFactory 进行实例化。默认的 JobFactory 只是激活作业类的一个新实例。您可能想要创建自己的 JobFactory 实现来完成诸如让应用程序的 IoC 或 DI 容器生成/初始化作业实例之类的事情。
请参阅 IJobFactory 接口和关联的 Scheduler.SetJobFactory(fact) 方法。
ISchedulerFactory schedulerFactory = new StdSchedulerFactory(properties);
var scheduler = schedulerFactory.GetScheduler();
scheduler.JobFactory = jobFactory;
Edit
实现可以如下所示:
public class JobFactory : IJobFactory
{
protected readonly IServiceProvider Container;
public JobFactory(IServiceProvider container)
{
Container = container;
}
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
return Container.GetService(bundle.JobDetail.JobType) as IJob;
}
public void ReturnJob(IJob job)
{
// i couldn't find a way to release services with your preferred DI,
// its up to you to google such things
}
}
要将其与Microsoft.Extensions.DependencyInjection
像这样创建你的容器:
var services = new ServiceCollection();
services.AddTransient<IAuthorizable, AuthorizeService>();
var container = services.BuildServiceProvider();
var jobFactory = new JobFactory(container);
参考
石英文档 https://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/miscellaneous-features.html
Api http://quartznet.sourceforge.net/apidoc/2.0/html/html/eac63cfb-04e7-4c0b-d577-bc2d77a07826.htm
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)