有没有人有任何经验积分autofac和Quartz.Net?如果是这样,那么最好在哪里最好控制生命周期管理 - IJobFactory,在IJob的执行中,还是通过事件监听器?Autofac和Quartz.Net集成
现在,我使用的是自定义的autofac IJobFactory
创建IJob
实例,但我没有一个简单的方法来插入到ILifetimeScope
在IJobFactory确保注入任何昂贵的资源在IJob被清理。作业工厂只是创建一个作业的实例并将其返回。这里是我的想法电流(希望有更好的...)
它看起来像最AutoFac集成莫名其妙地裹
ILifetimeScope
围绕他们所创造的工作单元。明显的蛮力的方式似乎是通过ILifetimeScope
到IJob
,并有Execute
方法创建一个孩子ILifetimeScope
并实例化任何依赖关系。这似乎与服务定位器模式有点太接近了,这反过来似乎违背了autofac的精神,但它可能是确保正确处理范围的最明显的方式。我可以插入一些Quartz事件来处理Job执行堆栈的不同阶段,并处理那里的生命周期管理。这可能会做更多的工作,但如果它能更清晰地分离问题,可能值得。
确保一个IJob是围绕
IServiceComponent
型,这将做好各项工作的简单包装,并要求其为Owned<T>
,或Func<Owned<T>>
。我喜欢这个看起来更像autofac,但我不喜欢它对于IJob的所有实现者都不是严格可执行的。
感谢您抽出时间回复。我喜欢这个想法,因为它是原始问题中我的第三次头脑风暴的更加明确的版本。还有什么让我感到困惑的是,我无法控制一生的范围。基本上,我想在自己的LifetimeScope中运行每个IJob,几乎就像WCF服务调用的等价物。不幸的是Quartz`IJobFactory`非常火,忘记了我所能说的,所以如果我真的想要明确的范围边界,我不得不深入Quartz监听器系统。 – 2011-02-07 20:08:41