.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);
参考
-
Quartz文档
-
API