4

我有 ASP.NET MVC 3.0 应用程序,数据层使用 EF Code First。我已经实现了一个工作单元模式,我在 HttpContext.Current.Items[SomeKey] 集合上绑定了工作单元的上下文。工作单元在控制器上的 OnActionExecuting/Executed 事件中创建和提交。我正在使用温莎城堡实例化存储库。

现在我需要使用 Quartz.net 在我的应用程序中定期运行作业,这项作业也需要使用很少的存储库。问题是,在 SchedulerJob 实现中,没有 HttpContext 可用(确实)。在这种情况下,如何从 Quartz.net Job 实例化存储库(将 UnitOfWorkFactory 作为构造函数参数)?如何替换缺少的 HttpContext?我可能需要实现另一个 UnitOfWorkFactory,但我不确定我可以在哪里绑定我的上下文以及如何为 Quartz.net 线程注册不同的工厂。你能告诉我一个方法或模式吗?谢谢你。

4

2 回答 2

1

您可能需要考虑编写自己的作业工厂并在那里注入您的存储库。我在这里写了一篇关于如何做到这一点的帖子。Windsor 还具有直接集成 Quartz.net 的功能

最后一条评论...如果您要安排长时间运行的作业或安排定期运行的作业,您不应该在您的 Web 应用程序中托管 Quartz.Net。IIS 进程回收不会让您的调度程序正常运行。Windows服务是要走的路。

于 2013-04-21T00:45:30.633 回答
0

工作单元实现属于业务逻辑层,不应依赖于特定的表示层,例如 MVC。

我制作了一个在几个项目中使用过的自定义 UnitOfWorkScope:http: //coding.abel.nu/2012/10/make-the-dbcontext-ambient-with-unitofworkscope/

于 2013-04-20T10:10:19.063 回答