ASP.NET MVC 4 アプリケーションで Quartz.net 2.0 を使用してタスクをスケジュールしようとしていますが、タスクを実行できません。
コードは次のとおりです。
public class ScheduleTaskConfig
{
public static void StartScheduler()
{
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = schedulerFactory.GetScheduler();
JobKey emailSenderTaskKey = new JobKey("emailSenderTask", "email");
IJobDetail emailSenderTask = JobBuilder.Create<QueuedEmailsSendTask>()
.WithIdentity(emailSenderTaskKey)
.Build();
TriggerKey emailSenderTriggerKey = new TriggerKey("emailSenderTrigger", "email");
ITrigger emailSenderTrigger = TriggerBuilder.Create()
.WithIdentity(emailSenderTriggerKey)
.WithSimpleSchedule(s => s.RepeatForever().WithIntervalInSeconds(5))
.StartNow()
.Build();
scheduler.ScheduleJob(emailSenderTask, emailSenderTrigger);
scheduler.Start();
}
}
global.asax アプリケーション起動時に呼び出されます
protected void Application_Start()
{
ScheduleTaskConfig.StartScheduler();
...
}
IJob インターフェイスを実装するクラスは次のとおりです。
public class QueuedEmailsSendTask : IJob
{
private IQueuedEmailsService _queuedEmailsService { get; set; }
private IEmailSenderService _emailSenderService { get; set; }
public QueuedEmailsSendTask(IQueuedEmailsService queuedEmailsService, IEmailSenderService emailSenderService)
{
this._queuedEmailsService = queuedEmailsService;
this._emailSenderService = emailSenderService;
}
public void Execute(IJobExecutionContext executeContext)
{
//do stuff ...
}
}
Execute メソッドの先頭にブレークポイントを配置しましたが、デバッガーはそこで停止しません。私は何を間違っていますか?
更新: デフォルトのコンストラクターを持たない IJob インターフェイスを実装するクラスと関係があります。次のようにコンストラクターを変更すると、機能します。
public QueuedEmailsSendTask()
{
}
しかし、依存関係を注入できる必要があります。Autofac IoC コンテナーを使用しています。