インテグレーション経験がある人は誰でもautofacとQuartz.Net?もしそうなら、生涯管理を制御するのにIJobFactory、IJobのExecute内、またはイベントリスナをどこで管理するのが最適でしょうか?オートファックとQuartz.Netインテグレーション
今、私はIJob
インスタンスを作成するためのカスタムautofac IJobFactory
を使用していますが、私は注射される高価なリソースを確保するためにIJobFactoryでILifetimeScope
にプラグインするための簡単な方法を持っていませんIJobの掃除が済む。ジョブファクトリは、ジョブのインスタンスを作成して返します。ここでは、ほとんどのAutoFacの統合が何らかの形で彼らが作成した作業単位の周りにILifetimeScope
を包むように見えます私の現在の考え(うまくいけば、より良いものがあります...)
です。明白なブルートフォースの方法は、
IJob
にILifetimeScope
を渡し、という子を作成してそこに依存関係をインスタンス化することです。これはサービスロケータパターンにはあまりにも近すぎるように思えますが、それはオートファックの精神に反しているようですが、スコープの適切な処理を保証する最も明白な方法かもしれません。私は、ジョブ実行スタックのさまざまなフェーズを処理し、そこでライフタイム管理を処理するためにQuartzイベントの一部にプラグインすることができました。それはおそらくもっと多くの仕事になるでしょうが、懸念がより明確に分かれば価値があるかもしれません。
IJobは
IServiceComponent
型の単純なラッパーで、すべての作業を行い、Owned<T>
またはFunc<Owned<T>>
と要求してください。私はこれがautofacでよりいっそう明るくなるように思っていますが、私はIJobのすべての実装者にとって厳しく強制できないのが好きです。
おかげでそれを知っています。私は元の質問の第3のブレーンストームのより明示的なバージョンであるという点でアイデアが気に入っています。私にはまだ生き残ることができないということがあります。基本的には、各IJobをWCFサービスコールと同等の「LifetimeScope」で実行したいと考えています。残念なことに、Quartz 'IJobFactory'はかなり難しかったし、私が教えてくれたことを忘れてしまったので、明示的なスコープ境界が必要な場合は、Quartzリスナーシステムを掘り下げなければならないかもしれません。 –
@dfaivre - 私のコードでバグを修正しました。私は 'ownedJob.Value'部分を忘れました。おそらく、私の意図は今より明確です。 –
私は、Ownedがスコープを作成したことを知らなかった。非常に便利。私はこれがおそらく最も単純なアプローチだと思っています。ジョブが 'JobWrapper <>'のタイプでない場合、私はおそらく私の 'IJobFactory'を追加するでしょう。素晴らしい洞察力をもう一度ありがとう。 –