问题
I use ninject and quartz.net in my application and I want to inject job with ninject,But I do not know how to ,because all I know is that jobdetail is created by class of Jobimpl instead of an instance,such as:
JobBuilder.Create<SomeJob>()
Does anyone know how?
回答1:
You'll have to implement an Quartz.Spi.IJobFactory
- which uses an IResolutionRoot
to create the job (see below for implementation).
Then configure the scheduler to use it: Quartz.IScheduler.JobFactory = kernel.Get<NinjectJobFactory>();
(or, alternatively: Quartz.IScheduler.JobFactory = new NinjectJobFactory(kernel);
)
public class NinjectJobFactory : IJobFactory
{
private readonly IResolutionRoot resolutionRoot;
public NinjectJobFactory(IResolutionRoot resolutionRoot)
{
this.resolutionRoot = resolutionRoot;
}
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
return (IJob)this.resolutionRoot.Get(bundle.JobDetail.JobType);
}
public void ReturnJob(IJob job)
{
this.resolutionRoot.Release(job);
}
}
来源:https://stackoverflow.com/questions/22810793/how-to-inject-quartzs-job-with-ninject