ASP.Net MVC 3, Ninject i Quartz.Net -jak?

Używam teraz Ninject 2.2.1.4, z moim MVC3, udało mi się skonfigurować Ninject run z nim, ale nie wiem jak zrobić Ninject run z Quartz.Net w moim MVC3 Czy ktoś może pomóc?

Author: Hieu Nguyen Trung, 2011-07-19

1 answers

Utwórz JobFactory, który używa Ninject

public class NinjectJobFactory : IJobFactory
{
    private readonly Func<Type, IJob> jobFactory;

    public NinjectJobFactory (Func<Type, IJob> jobFactory)
    {
        this.jobFactory = jobFactory;
    }

    public IJob NewJob(TriggerFiredBundle bundle)
    {
        return this.jobFactory(bundle.JobDetail.JobType);
    }
}

I QuarzSchedulerProvider

public class QuartzSchedulerProvider : Provider<IScheduler> 
{
    private readonly IJobFactory jobFactory;
    private readonly IEnumerable<ISchedulerListener> listeners;
    private readonly ISchedulerFactory schedulerFactory;

    public QuartzSchedulerProvider(
        ISchedulerFactory schedulerFactory,
        IJobFactory jobFactory, 
        IEnumerable<ISchedulerListener> listeners)
    {
        this.jobFactory = jobFactory;
        this.listeners = listeners;
        this.schedulerFactory = schedulerFactory;
    }

    protected override IScheduler CreateInstance(IContext context)
    {
        var scheduler = this.schedulerFactory.GetScheduler();
        scheduler.JobFactory = this.jobFactory;
        foreach (var listener in this.listeners)
        {
            scheduler.AddSchedulerListener(listener);
        }

        return scheduler;
    }
}

I SchedulerFactoryProvider

public class QuartzSchedulerFactoryProvider : Provider<ISchedulerFactory>
{
    protected override ISchedulerFactory CreateInstance(IContext context)
    {
        var properties = new NameValueCollection();
        properties["quartz.dataSource.DataSource.connectionString"] = "Your connection string";
        properties["quartz.dataSource.DataSource.provider"] = "Your provider";

        properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
        properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz ";
        properties["quartz.jobStore.tablePrefix"] = "QRTZ_";
        properties["quartz.jobStore.dataSource"] = "DataSource";
        properties["quartz.jobStore.useProperties"] = "true";

        return new StdSchedulerFactory(properties);
    }
}

I skonfigurować

Bind<IJobFactory>().To<NinjectJobFactory>();
Bind<ISchedulerFactory>().ToProvider<QuartzSchedulerFactoryProvider>();
Bind<IScheduler>().ToProvider<QuartzSchedulerProvider>().InSingletonScope();
Bind<Func<Type, IJob>>().ToMethod(ctx => t => (IJob)ctx.Kernel.Get(t));

Jeśli potrzebujesz jakiegoś ISchedulerListener np. do logowania, to również tutaj.

Inject instance of IScheduler where you want to add Jobs and most likely you have to do property injection of an instance into global.asax też. Ale zauważ, że nie używałem Quarz jeszcze w kontekście MVC, ponieważ myślę, że zaplanowane zadania nie należy do aplikacji internetowej, ale raczej do usługi działającej na tym samym serwerze.

 20
Author: Remo Gloor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-21 09:17:58