c# - 将 Quartz.NET 触发器设置为在特定对象实例上触发

标签 c# quartz.net

我怎样才能让 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/

相关文章:

c# - Quartz.net + 任务并行库

quartz-scheduler - 使用简单的xml来驱动Quartz Scheduler

c# - 如何在 Quartz.Net 中添加新作业或更新现有作业的触发器?

c# - 什么约定将 poco 属性自动映射到列?我怎样才能禁用该自动映射?

c# - 如何更快/更智能地读取文本文件?

c# - OOP:理解抽象

c# - 棘手的 Quartz.NET 场景

c# - 无法连接到 net.tcp : The connection attempt lasted for a time span

c# - 如何使用 TableAdapter 返回单行

c# - 在 ASP.NET Core RC2 应用程序中定期运行后台任务