如何从继承自IDirectoryScanListener的作业访问IJobExecutionContext

时间:2014-07-03 22:36:33

标签: c# quartz-scheduler quartz.net

我正在使用从NuGet,.NET Framework v4.5下载并使用C#的Quartz v2.2.3.400。我有几个从IJob继承的作业,并使用传递给IJobExecutionContext方法的Execute()对象。那些工作得很好。我还创建了一个继承自IJobListener的全局作业监听器,它记录了每个被执行的作业,再次利用IJobExecutionContextJobToBeExecuted()JobExecutionVetoed()传递的JobWasExecuted()方法。

现在提出我的问题。我还有一些作业扫描目录中的新文件,这些文件继承自IDirectoryScanListener。此接口定义方法签名void FilesUpdatedOrAdded(IEnumerable<FileInfo> updatedFiles);,它提供自上次轮询以来该目录中任何新文件的文件信息。那样太好了!但是,我似乎无法找到访问此作业IJobExecutionContext,调度程序等的方法。我想查看作业上下文的一些属性并将数据添加到数据映射中,但是我没有IJobExecutionContext被曝光。有没有办法可以访问继承自IDirectoryScanListener的类?

谢谢!

1 个答案:

答案 0 :(得分:1)

您无法真正从实现IDirectoryScanListener接口的类访问调度程序。该接口仅定义此方法:

    public interface IDirectoryScanListener
    {
        ///<param name="updatedFiles">An array of <see cref="FileInfo"/> objects that were updated/added 
        ///since the last scan of the directory</param>
        void FilesUpdatedOrAdded(IEnumerable<FileInfo> updatedFiles);
    }

您可以创建自己的作业,继承自DirectoryScanJob。然后你就可以访问上下文了。它不应该是太多的工作。完成后,只需将上下文传递给基类。像这样:

    public class MyDirectoryScanJob:DirectoryScanJob
    {
        new public void Execute(IJobExecutionContext context)
        {
            // You can access the context here
            base.Execute(context);
        } 
    }