[英].Net Quartz Windows Service resolve job dependencies
我刚刚开始使用Quartz.Net-基本上我想将其作为Windows服务运行,并使用IJob界面计划在不同程序集中的作业。 默认情况下,要执行此操作,我需要将包含Jobs(及其所有依赖项)的程序集与Quartz.exe放在根文件夹中。 一切都很好-我已经做好了。 但是,我想将来自不同程序集的不同作业放入根目录下的特定文件夹中。 当我这样做时,Quartz无法解析依赖关系-我意识到我可以创建自己的程序集解析器,但是我不知道将其放置在何处或应实例化它-任何帮助都将非常有用。
我尝试创建自己的JobFactory并根据提供的路径在其中解决依赖项。 但是,它不起作用-由于某种原因JobFactory失败,因为它找不到Job依赖关系-这令人困惑,因为Job仅在JobFactory.NewJob方法中创建,如下所示:
public class MyQuartzJobFactory : IJobFactory
{//此行然后失败,因为它找不到依赖项私有静态只读ILog log = LogManager.GetLogger(typeof(MyQuartzJobFactory));
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
IJobDetail jobDetail = bundle.JobDetail;
Type jobType = jobDetail.JobType;
try
{
if (log.IsDebugEnabled)
{
log.Debug(string.Format(CultureInfo.InvariantCulture, "Producing instance of Job '{0}', class={1}", jobDetail.Key, jobType.FullName));
}
string path = "";
if (jobDetail.JobDataMap.ContainsKey("custPath"))
{
path = jobDetail.JobDataMap["custPath"].ToString();
}
return ObjectUtils.InstantiateType<IJob>(jobType);
}
catch (Exception e)
{
SchedulerException se = new SchedulerException(string.Format(CultureInfo.InvariantCulture, "Problem instantiating class '{0}'", jobDetail.JobType.FullName), e);
throw se;
}
}
/// <summary>
/// Allows the job factory to destroy/cleanup the job if needed.
/// No-op when using SimpleJobFactory.
/// </summary>
public void ReturnJob(IJob job)
{
var disposable = job as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.