我有一个嵌入了Quartz.Net的Windows服务,但似乎找不到在Quartz.Net作业中创建对实例化对象的引用的方法......
当启动Windows服务时,它会实例化一些对象以进行日志记录,数据库访问和其他目的,因此我希望我的Quartz.Net作业使用这些已经实例化的对象,而不是创建自己的这些对象实例。但是,Quartz.Net作业由调度程序使用无参数构造函数实例化,因此无法使用构造函数传递引用。
我是否必须创建自己的JobFactory实现,这是实现此目的的唯一方法吗?
答案 0 :(得分:4)
我认为适用于这种情况的方法是使用job listener。 你可以创建一个"虚拟"什么都不做的工作,以及检测工作何时运行的监听器。您可以使用对任何依赖项的引用来实例化侦听器,只要它们在您设置作业调度时可用。
IJobDetail job = JobBuilder.Create<DummyJob>()
.WithIdentity("job1")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1")
.StartNow()
.WithSimpleSchedule(x => x
.WithInterval(interval)
.RepeatForever())
.Build();
_scheduler.ScheduleJob(job, trigger);
MyJobListener myJobListener = new MyJobListener (dependency1, dependency2);
_scheduler.ListenerManager.AddJobListener(myJobListener, KeyMatcher<JobKey>.KeyEquals(new JobKey("job1")));
答案 1 :(得分:2)
您可以在jobDetail.JobDataMap
中添加对象的键值对,并检索它们from(JobExecutionContext) context.JobDetail.JobDataMap
。
答案 2 :(得分:1)
不同的上下文(Linux / JAVA),但创建自己的继承自Quartz的Factory。重写方法“createScheduler”。调用super方法,将实例保存在静态(同步)哈希映射中。编写静态方法以按名称获取实例。