我怎样才能让 Quartz 在已经创建和初始化的对象上触发触发器?
例如
public class Foo : IJob
{
public Foo ( configuration items ... ) { }
}
// Calling Code...
Foo f = new Foo( /*Non empty constructor*/ );
Schedular sched = new SchedulerFactory().GetScheduler();
JobDetail jD = new JobDetail("fooDetail", null typeof(Foo));
Trigger trig = TriggerUtils.MakeSecondlyTrigger(15);
sched.ScheduleJob( jD, trig );
sched.Start();
由于 foo 没有 0 args 构造函数,因此 Quartz.NET 在实例化作业和运行它时遇到问题。有什么方法可以让 Quartz 触发 Foo, f 的实例吗?
如果我遗漏了有关 Quartz 及其用法的基本事实,请原谅我。
最佳答案
您可以实现自己的 Quartz.Spi.IJobFactory (使用 DI 容器)定义作业的创建和初始化方式。 Quartz 不允许调度已经初始化的作业。
这是一个使用 unity 的 JobFactory创造就业机会。在容器中,您可以注册作业类型并定义容器应如何构建作业以及如何解决作业的依赖关系。
public class UnityJobFactory : IJobFactory {
public UnityJobFactory(IUnityContainer container) {
Container = container;
}
public IUnityContainer Container { get; private set; }
public IJob NewJob(TriggerFiredBundle bundle) {
try {
return Container.Resolve(bundle.JobDetail.JobType, null) as IJob;
}
catch (Exception exception) {
throw new SchedulerException("Error on creation of new job", exception);
}
}
}
关于c# - 将 Quartz.NET 触发器设置为在特定对象实例上触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5114698/