我有一个现有的C#ASP.NET应用程序,它具有用户界面和各种按钮来启动操作。这些操作对一个单独的类进行同步方法调用,我将这个类称为ServiceLayer。该层还初始化数据模型。
我想安排UI中的某些操作在一天中的某些时间发生。我相信Quartz.NET提供了我需要的所有必要功能。我可以从每个Job类的Execute(IJobExecutionContext上下文)(即实现IJob接口的类)成功调用singleton类ServiceLayer上的方法。但是,我不喜欢使用这种方法有几个原因:
我的问题是处理这种情况的最佳设计模式是什么,而不是直接在单例上调用方法?我相信我需要以某种方式使用JobDataMap,但我不确定如何。我应该关注生产者 - 消费者还是排队方法?
答案 0 :(得分:1)
您可能需要考虑实施将服务层对象注入作业的自定义作业工厂。已经有最流行的DI容器的自定义工厂的实现,所以你可以选择其中一个或自己构建。这将允许您在每次创建作业时传递对服务层对象的引用,并且应该有助于单元测试。它也将解决单身人士问题。
就扩展而言,您可以使用JobDataMap传递连接字符串或服务器名称等内容,从而允许您在服务器之间进行负载平衡或分配工作。
以下是一些描述自定义作业工厂方法的posts,如果您最终沿着这条路走下去。