如何在Quartz.Net作业中创建对实例化对象的引用?

时间:2011-01-03 17:22:26

标签: quartz.net

我有一个嵌入了Quartz.Net的Windows服务,但似乎找不到在Quartz.Net作业中创建对实例化对象的引用的方法......

当启动Windows服务时,它会实例化一些对象以进行日志记录,数据库访问和其他目的,因此我希望我的Quartz.Net作业使用这些已经实例化的对象,而不是创建自己的这些对象实例。但是,Quartz.Net作业由调度程序使用无参数构造函数实例化,因此无法使用构造函数传递引用。

我是否必须创建自己的JobFactory实现,这是实现此目的的唯一方法吗?

3 个答案:

答案 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方法,将实例保存在静态(同步)哈希映射中。编写静态方法以按名称获取实例。