【问题标题】:how to inject quartz's job with ninject?如何用ninject注入石英的工作?
【发布时间】:2014-05-13 16:44:12
【问题描述】:

我在我的应用程序中使用了ninject和quartz.net,我想用ninject注入工作,但我不知道如何,因为我只知道jobdetail是由Jobimpl的类而不是实例创建的,例如:

JobBuilder.Create<SomeJob>()

有人知道怎么做吗?

【问题讨论】:

    标签: ninject quartz.net inject


    【解决方案1】:

    您必须实现 Quartz.Spi.IJobFactory - 它使用 IResolutionRoot 来创建作业(请参阅下面的实现)。 然后配置调度器使用它:Quartz.IScheduler.JobFactory = kernel.Get&lt;NinjectJobFactory&gt;(); (或者,或者: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
    • Quartz.IScheduler.JobFactory = *new* NinjectJobFactory() 更有意义
    • 是的,也许。但我认为这更像是Quartz.IScheduler.JobFactory = kernel.Get&lt;NinjectJobFactory&gt;() 或者你让NinjectJobFactory 被注入......这就是我忽略它的原因;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    相关资源
    最近更新 更多