佛山网站搭建费用,怎么看别人网站怎么做的,wordpress lt,班级网站建设首页报告简述
有时会遇到需要在IJob实现类中依赖注入其他类或接口的情况#xff0c;但Quartz的默认JobFactory并不能识别具有有参构造函数的IJob实现类#xff0c;也就无法进行依赖注入
需要被依赖注入的类#xff1a;
public class TestClass
{public TestClass(Type jobType, s…简述
有时会遇到需要在IJob实现类中依赖注入其他类或接口的情况但Quartz的默认JobFactory并不能识别具有有参构造函数的IJob实现类也就无法进行依赖注入
需要被依赖注入的类
public class TestClass
{public TestClass(Type jobType, string cronExpression){JobType jobType;CronExpression cronExpression;}public Type JobType { get; }public string CronExpression { get; }
}
解决方式
1.安装依赖Quartz、Microsoft.Extensions.DependencyInjection 2.实现接口 实现IJob接口 public class MyJob : IJob{private readonly TestClass test;public MyJob(TestClass test){this.test test;}public Task Execute(IJobExecutionContext context){Console.WriteLine(hello);Console.WriteLine(test.ToString());return Task.CompletedTask;}} 实现IJobFactory接口
public class MyJobFactory : IJobFactory
{private readonly IServiceProvider _serviceProvider;public MyJobFactory(IServiceProvider serviceProvider){_serviceProvider serviceProvider;}public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler){return _serviceProvider.GetRequiredService(bundle.JobDetail.JobType) as IJob;}public void ReturnJob(IJob job) { }
}
3.将IJob实现类、IJobFactory实现类、需要被依赖注入的类TestClass添加进容器
private static ServiceProvider ConfigureServices()
{var services new ServiceCollection();services.AddSingletonMyJob();services.AddSingletonIJobFactory, MyJobFactory();services.AddSingleton(new TestClass(jobType: typeof(MyJob),cronExpression: 0/5 * * * * ?));return services.BuildServiceProvider();
}
4.将scheduler的JobFactory属性替换为IJobFactory实现类的实例
var scheduler await StdSchedulerFactory.GetDefaultScheduler();// JobFactory替换为IJobFactory实现类的实例
scheduler.JobFactory serviceProvider.GetServiceIJobFactory();
5.测试 static async Task Main(string[] args){var serviceProvider ConfigureServices();var scheduler await StdSchedulerFactory.GetDefaultScheduler();// JobFactory替换为IJobFactory实现类的实例scheduler.JobFactory serviceProvider.GetServiceIJobFactory();var jobSchedule serviceProvider.GetServiceTestClass();var jobDetail JobBuilder.Create(jobSchedule.JobType).Build();var trigger TriggerBuilder.Create().WithCronSchedule(jobSchedule.CronExpression).Build();await scheduler.ScheduleJob(jobDetail, trigger);await scheduler.Start();Thread.Sleep(10000);}