2014-04-02 8 views
6

Io uso ninject e quartz.net nella mia applicazione e voglio iniettare lavoro con ninject, ma non so come, perché tutto quello che so è che jobdetail è creato dalla classe di Jobimpl invece di un'istanza, come ad esempio:come iniettare il lavoro di quarzo con ninject?

JobBuilder.Create<SomeJob>() 

Qualcuno sa come?

risposta

6

È necessario implementare un Quartz.Spi.IJobFactory - che utilizza un IResolutionRoot per creare il lavoro (vedere sotto per l'implementazione). quindi configurare il programma di pianificazione di usarlo: Quartz.IScheduler.JobFactory = kernel.Get<NinjectJobFactory>(); (o, in alternativa: 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

Grazie mille, ho preso @BatteryBackupUnit – TommyLike

+0

'Quartz.IScheduler.JobFactory = * nuovo * NinjectJobFactory() 'ha più senso – stuartd

+0

sì forse. Ma penso che sia piuttosto sulla falsariga di 'Quartz.IScheduler.JobFactory = kernel.Get ()' o lasci che 'NinjectJobFactory' sia iniettato .. è per questo che l'ho lasciato fuori ;-) – BatteryBackupUnit

Problemi correlati