Quartz .NET作业执行调用现有的类方法

时间:2012-08-08 01:05:20

标签: c# quartz.net

我有一个现有的C#ASP.NET应用程序,它具有用户界面和各种按钮来启动操作。这些操作对一个单独的类进行同步方法调用,我将这个类称为ServiceLayer。该层还初始化数据模型。

我想安排UI中的某些操作在一天中的某些时间发生。我相信Quartz.NET提供了我需要的所有必要功能。我可以从每个Job类的Execute(IJobExecutionContext上下文)(即实现IJob接口的类)成功调用singleton类ServiceLayer上的方法。但是,我不喜欢使用这种方法有几个原因:

  • 难以进行单元测试(例如,我必须确保在我可以做任何事情之前初始化单身人士)
  • 如果调用了许多工作,则扩大规模
  • 与同时在单例类上调用多个方法相关的线程安全问题。

我的问题是处理这种情况的最佳设计模式是什么,而不是直接在单例上调用方法?我相信我需要以某种方式使用JobDataMap,但我不确定如何。我应该关注生产者 - 消费者还是排队方法?

1 个答案:

答案 0 :(得分:1)

您可能需要考虑实施将服务层对象注入作业的自定义作业工厂。已经有最流行的DI容器的自定义工厂的实现,所以你可以选择其中一个或自己构建。这将允许您在每次创建作业时传递对服务层对象的引用,并且应该有助于单元测试。它也将解决单身人士问题。

就扩展而言,您可以使用JobDataMap传递连接字符串或服务器名称等内容,从而允许您在服务器之间进行负载平衡或分配工作。

以下是一些描述自定义作业工厂方法的posts,如果您最终沿着这条路走下去。