Asp.net-Mvc-3
ASP.Net MVC 3、Ninject 和 Quartz.Net - 如何?
我現在使用 Ninject 2.2.1.4 和我的 MVC3,我成功配置 Ninject 執行它,但我不知道如何讓 Ninject 在我的 MVC3 中執行 Quartz.Net 有人可以幫忙嗎?
創建一個使用 Ninject 的 JobFactory
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); } }和一個 Quartz Scheduler Provider
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; } }和一個 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); } }並配置
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));如果您需要一些 ISchedulerListener,例如用於記錄日誌,也將它們綁定在這裡。
在要添加作業的地方注入 IScheduler 實例,並且很可能您也必須將實例的屬性注入到 global.asax 中。但請注意,我還沒有在 MVC 上下文中使用過 Quarz,因為我認為計劃任務不屬於 Web 應用程序,而是屬於在同一台伺服器上執行的服務。