2017-03-07 15 views
0

私はQuartz.NETを使用しています。すべてが正常に動作しますが、ジョブのいずれかが依存関係に依存しています。私はアイデンティティの登録をコメントアウト場合アイデンティティジョブのインスタンス化が失敗した場合、Quartz.NETは例外をスローしません

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; 
     } 

使用

登録コード

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); 
    } 

ジョブは - スケジューラが細かい実行されているが、例外がスローされることなく、仕事を使用して実行を停止します。 依存関係が登録されていない場合、通知を受け取る方法や例外をスローする方法はありますか?

+0

私の答えを参照してください。また、「Quratz.NETは、ジョブのインスタンス化が失敗した場合に例外をスローしません」などのタイトルを変更することをお勧めします。 –

答えて

2

キャッスルは、コンポーネント解決中にいくつかの非オプション(コンストラクター)依存関係が見つからない場合、常に例外をスローします。

何あなたが見ることQuartz.NET設計の結果である - 例外は、クォーツはちょうどそれをキャッチし、後でswalowedさSchedulerExceptionJobRunShell line 94を参照)に変換(ジョブファクトリメソッドNewJobを使用して)は、ジョブの作成時にスローされた場合(QuartzSchedulerThread line 420を参照してください)。同時に、QuartzはSchedulerErrorメソッドをISchedulerListenerというスケジューラにアタッチします

これはすべて、Quartzスケジューラスレッドがアプリケーションを破壊しないようにするためです。 開発中にチェックしたい場合は、Quartzロギング(Common.Loggingフレームワークを使用 - documentation - at the bottomを参照)を設定するだけで、このようなエラーはログに記録されます。そうしないと、write your ownISchedulerListenerは... SchedulerError「イベント」を処理し、あなたがそこにやりたいすることができます

注:提供されたソースコードへのリンクはQuartz.NETが、2の、まだ未発表バージョン3.x用でマスターブランチからです.xバージョンは同じ動作...

関連する問題