[英].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.