6
我在我的應用程序中使用ninject和quartz.net,我想用ninject注入作業,但是我不知道如何去做,因爲我所知道的是jobdetail是由Jobimpl類而不是實例創建的,例如:如何注入石英的工作與ninject?
JobBuilder.Create<SomeJob>()
有沒有人知道如何?
我在我的應用程序中使用ninject和quartz.net,我想用ninject注入作業,但是我不知道如何去做,因爲我所知道的是jobdetail是由Jobimpl類而不是實例創建的,例如:如何注入石英的工作與ninject?
JobBuilder.Create<SomeJob>()
有沒有人知道如何?
你必須實現一個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);
}
}
非常感謝,我知道了@BatteryBackupUnit – TommyLike
'Quartz.IScheduler.JobFactory = *新* NinjectJobFactory()也許更有意義 – stuartd
是的。但我認爲這是'Quartz.IScheduler.JobFactory = kernel.Get()'的行,或者讓'NinjectJobFactory'注入。這就是爲什麼我把它排除在外;-) –
BatteryBackupUnit