使用多个构造函数参数创建Quartz.NET作业

使用多个构造函数参数创建Quartz.NET作业,.net,quartz-scheduler,quartz.net,.net,Quartz Scheduler,Quartz.net,我有一份工作需要在另一个对象上启动一些方法。我希望能够将这些信息传递到其构造函数中的作业中 环顾四周,实现这一目标的唯一途径似乎是使用一个国际奥委会框架。虽然这种方法在将来对我来说是一个解决方案,但现在我需要一个普通的解决方案,不需要任何IoC 我知道JobDataMap,但由于序列化,文档建议不要这样做。该对象是多线程和状态的,因此序列化无论如何都是代码自杀 如何创建类似于以下内容的作业: public class MyJob : IJob { private readonly IFo

我有一份工作需要在另一个对象上启动一些方法。我希望能够将这些信息传递到其构造函数中的作业中

环顾四周,实现这一目标的唯一途径似乎是使用一个国际奥委会框架。虽然这种方法在将来对我来说是一个解决方案,但现在我需要一个普通的解决方案,不需要任何IoC

我知道
JobDataMap
,但由于序列化,文档建议不要这样做。该对象是多线程和状态的,因此序列化无论如何都是代码自杀

如何创建类似于以下内容的作业:

public class MyJob : IJob
{
    private readonly IFoo _foo;

        public StopMonitoring(IFoo foo)
        {
            _foo = foo;
        }

        public void Execute(IJobExecutionContext context)
        {
            foo.GetCurrentState();
        }
    }
}

您需要使用JobFactory:

internal sealed class IntegrationJobFactory : IJobFactory
{
    private readonly IUnityContainer _container;

    public IntegrationJobFactory(IUnityContainer container)
    {
        _container = container;
    }

    public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
    {
        var jobDetail = bundle.JobDetail;

        var job = (IJob)_container.Resolve(jobDetail.JobType);
        return job;
    }

    public void ReturnJob(IJob job)
    {
    }
}
并使用它:

var _scheduler = schedulerFactory.GetScheduler();
var _scheduler.JobFactory = new IntegrationJobFactory(container);

您不想使用IoC框架有什么特别的原因吗?只是问一下,因为我最近使用Ninject为工作实现了依赖注入,我很乐意分享我的想法。我所做的是创建我自己的作业工厂,它继承了SimpleJobFactory并在其中添加了我的DI位。我将添加IoC,但这是一个共享项目。老实说,这让我很烦恼,因为我找不到一个不是国际奥委会的方法来做这件事。不过我现在已经弄明白了,我把它复杂化了。没有它,我看不出一个整洁的方法。事实上,没有。我被这个问题中的代码弄糊涂了。StopMonitoring方法实际上应该是构造函数吗?在这种情况下,它应该被称为MyJob?您是否在问如何确保在构造MyJob时,构造函数会给它一个“foo”?非常感谢您的回答。我不敢相信,在所有复杂的解决方案中,最简单的才是有效的。用于使其与autofac一起工作。应将其标记为answer@josh很高兴提供帮助:)@Backs如果我有多个IJob具有构造函数参数,那么我可以为一个调度器创建多个jobfacroty吗?并不是说我使用的是windows服务的石英。我对这个答案感到困惑-它似乎与问题中的代码无关?在答案中,foo是传递给构造函数的吗?或者foo是被设置的吗?@BanksySan-一切都很好,我只是碰巧在寻找如何使用Quartz做类似的事情,没有那么多匹配的问题\答案。我最终以不同的方式解决了问题,但我怀疑您可以将答案编辑为强制转换为MyJob类型,如果它是MyJob,请在NewJob方法中设置一个Foo属性?这将避免国际奥委会对问题的要求,但也可能需要对问题进行编辑以使其有意义,而且我不能100%肯定它会起作用,因为我没有尝试过。