.net核心石英dependency injection

如何在.net内核中配置Quartz以使用dependency injection? 我使用标准的.net核心依赖机制。 在实现IJob的类的构造函数中,我需要注入一些依赖项。

您可以使用Quartz.Spi.IJobFactory接口并实现它。 Quartz文件指出:

触发器触发时,与其关联的Job将通过Scheduler上配置的JobFactory实例化。 默认的JobFactory只是激活作业类的新实例。 您可能希望创建自己的JobFactory实现来完成诸如让应用程序的IoC或DI容器生成/初始化作业实例之类的事情。 请参阅IJobFactory接口和相关的Scheduler.SetJobFactory(fact)方法。

 ISchedulerFactory schedulerFactory = new StdSchedulerFactory(properties); var scheduler = schedulerFactory.GetScheduler(); scheduler.JobFactory = jobFactory; 

编辑

实现可能如下所示:

 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(); var container = services.BuildServiceProvider(); var jobFactory = new JobFactory(container); 

参考

  1. Quartz文档

  2. API