【发布时间】:2011-02-05 22:33:09
【问题描述】:
有人有集成autofac和Quartz.Net的经验吗?如果是这样,最好在哪里控制生命周期管理 - IJobFactory,在 IJob 的执行中,还是通过事件侦听器?
现在,我正在使用自定义 autofac IJobFactory 来创建 IJob 实例,但我没有简单的方法来插入 IJobFactory 中的 ILifetimeScope 以确保任何昂贵的资源在 IJob 中注入的被清理。作业工厂只是创建一个作业实例并返回它。这是我目前的想法(希望有更好的想法......)
看起来大多数 AutoFac 集成以某种方式将
ILifetimeScope包裹在他们创建的工作单元周围。显而易见的蛮力方法似乎是将ILifetimeScope传递给IJob并让Execute方法创建一个子ILifetimeScope并在那里实例化任何依赖项。这似乎有点过于接近服务定位器模式,反过来又似乎违背了 autofac 的精神,但它可能是确保正确处理范围的最明显方式。我可以插入一些 Quartz 事件来处理 Job 执行堆栈的不同阶段,并在那里处理生命周期管理。这可能需要做更多的工作,但如果能够更清晰地分离关注点,这可能是值得的。
确保 IJob 是
IServiceComponent类型的简单包装器,它将完成所有工作,并将其请求为Owned<T>或Func<Owned<T>>。我喜欢 autofac 的这种感觉,但我不喜欢它对 IJob 的所有实现者都不是严格执行的。
【问题讨论】:
标签: autofac quartz.net