我正在通过城堡windsor使用Quartz.NET,一切正常,但其中一个工作使用了Identity依赖,如果我没有注册依赖,它不会抛出异常。
注册码
static void RegisterTriggerListeners(IWindsorContainer container)
{
container.Register(DefaultInterfaces());
container.Register(Connections());
container.Register(
Component.For<Quartz.IScheduler>().Instance(StdSchedulerFactory.GetDefaultScheduler()),
Component.For<IJobFactory>().ImplementedBy<WindsorJobFactory>().DependsOn(Dependency.OnValue<IWindsorContainer>(container)).LifestyleTransient(),
// See: http://blog.nikosbaxevanis.com/2012/07/16/using-the-web-api-dependency-resolver-with-castle-windsor-scoped-lifetime/
// public void Install(IWindsorContainer container, IConfigurationStore store) section near the end of the page
Classes.FromThisAssembly().BasedOn<IHttpController>().LifestyleScoped()
//,
//Component
// .For<IIdentity>()
// .UsingFactoryMethod(WindowsIdentity.GetCurrent)
// .LifestyleSingleton()
);
RegisterJobs(container);
}
使用Identity
的工作class ValidationStep : Step<ITransactionLineValidationStep, TransactionLine>, ITransactionLineValidationStep
{
private IImpersonatedWebClient ImpersonatedWebClient { get; }
private ISettings Settings { get; }
readonly IIdentity _identity;
private string ValidationAddress { get; set; }
private const string ValidationResultError = "Error";
public ValidationStep(IImpersonatedWebClient impersonatedWebClient,
ISettings settings,
IIdentity identity)
{
ImpersonatedWebClient = impersonatedWebClient;
Settings = settings;
_identity = identity;
}
如果我注释掉身份注册 - 调度程序运行正常,但停止使用作业运行而不抛出异常。 如果没有注册依赖,是否有任何方式我会收到通知或抛出异常?
答案 0 :(得分:2)
它可能不是Castle问题,因为当组件解析期间缺少某些非可选(构造函数)依赖项时,Castle总是抛出异常。
你看到的是Quartz.NET设计的结果 - 如果在创建作业期间抛出异常(使用作业工厂方法NewJob
),Quartz会抓住它并将其转换为SchedulerException
(参见{{ 3}})后来被吞噬(见JobRunShell line 94)。同时,Quartz调用附加到它的调度程序<{p>}的任何SchedulerError
的{{1}}方法
所有这一切的原因是为了保护Quartz调度程序线程免于破坏应用程序。
如果您只想在开发期间检查这一点,只需配置Quartz日志记录(使用Common.Logging框架 - 请参阅QuartzSchedulerThread line 420),您就会在日志中看到这样的错误。否则,您可以documentation - at the bottom ISchedulerListener
来处理ISchedulerListener
&#34;事件&#34;并做任何你想做的事......
注意:提供的源代码链接来自master分支,这是尚未发布的Quartz.NET 3.x版本,但2.x版本的工作原理相同......