2014-04-02 29 views
6

我在我的應用程序中使用ninject和quartz.net,我想用ninject注入作業,但是我不知道如何去做,因爲我所知道的是jobdetail是由Jobimpl類而不是實例創建的,例如:如何注入石英的工作與ninject?

JobBuilder.Create<SomeJob>() 

有沒有人知道如何?

回答

6

你必須實現一個Quartz.Spi.IJobFactory - 它使用IResolutionRoot來創建作業(見下面的實現)。 然後配置調度使用它:Quartz.IScheduler.JobFactory = kernel.Get<NinjectJobFactory>(); (或者: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); 
    } 
} 
+0

非常感謝,我知道了@BatteryBackupUnit – TommyLike

+0

'Quartz.IScheduler.JobFactory = *新* NinjectJobFactory()也許更有意義 – stuartd

+0

是的。但我認爲這是'Quartz.IScheduler.JobFactory = kernel.Get ()'的行,或者讓'NinjectJobFactory'注入。這就是爲什麼我把它排除在外;-) – BatteryBackupUnit