как залить работу кварца с нинджектом?

Я использую ninject и quartz.net в своем приложении, и я хочу ввести задание с помощью ninject, но я не знаю, как это сделать, потому что все, что я знаю, это то, что jobdetail создается классом Jobimpl вместо экземпляра, например:

JobBuilder.Create<SomeJob>()

Кто-нибудь знает как?


person TommyLike    schedule 02.04.2014    source источник


Ответы (1)


Вам нужно будет реализовать 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);
    }
}
person BatteryBackupUnit    schedule 02.04.2014
comment
Большое спасибо, я получил @BatteryBackupUnit - person TommyLike; 03.04.2014
comment
Quartz.IScheduler.JobFactory = *new* NinjectJobFactory() имеет смысл - person stuartd; 18.09.2014
comment
Да, может быть. Но я думаю, что это скорее похоже на Quartz.IScheduler.JobFactory = kernel.Get<NinjectJobFactory>(), или вы позволите ввести NinjectJobFactory .. вот почему я не упомянул об этом ;-) - person BatteryBackupUnit; 18.09.2014