Create a Quartz.NET Job with several constructor parameters

十年热恋 提交于 2019-11-30 03:56:58

问题


I have a job which needs to kick off some methods on another object. I'd like to be able to pass these into the job in its constructor.

Looking around, it seems that the only way to achieve this is to use one of IoC frameworks. Whilst this method will be a solution for me in the future, right now I need a vanilla solution, not requiring any IoC.

I am aware of the JobDataMap but the Best Practices documentation advises against this due to serialization. The object is multi-threaded and statefull, so serializing would be code suicide anyhow.

How can I create a job similar to below:

public class MyJob : IJob
{
    private readonly IFoo _foo;

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

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

回答1:


You need to use 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)
    {
    }
}

And use it:

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


来源:https://stackoverflow.com/questions/31861146/create-a-quartz-net-job-with-several-constructor-parameters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!