2016-07-06 51 views
6

我想使用Quartz作为脚本调度程序,从GUI编写VB,然后选择一个触发器,然后在触发器上编译和执行代码,难点是如何处理它以便它在应用程序上下文中运行此脚本,以便它可以访问我的实体框架模型等。我将如何实现这一目标?Quartz在运行时编译作业脚本?

+0

自从我使用Quartz(我假设你的意思是Quartz.net)已经很长时间了,但是iirc除了一些字符串数据之外不能注入任何东西进入石英工作。我之前解决这个问题的方式是通过从被执行的作业中访问全局状态(通过我的IoC或静态变量),这感觉非常混乱。我不知道如果石英现在有DI支持,但我猜它不是:( – cwap

+0

@cwap当然,这将工作,但字符串可能是一些VB执行? –

+0

它可能会,但字符串将需要根据你的石英储存设置和字符串长度,这可能是一个问题。查看JobDataMap(http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/more-这个问题是所有的石英工作都必须完全可序列化到石英数据模型中,所以动态数据和集合是不可行的。我猜像脚本可以工作,尽管我会亲自选择在其他地方构建脚本存储,就像在文件系统上的单独数据库或文件夹中一样。 – cwap

回答

4

基本上你需要的是把Quartz.Server放在你的应用程序之上。将此项目添加到您的解决方案。

如果您只需要在石英作业中使用您的实体,然后添加您的项目作为Quartz.Server的参考,并像您在主应用中一样使用实体。

如果您使用某个IoC容器,那么您可以使用扩展名this将依赖注入到作业中。或者您可以编写自己的SchedulerFactory和JobFactory,并在此构建您的作业环境。

+0

嗨阿列克谢,我在这方面取得了一些进展,请你看看我的其他问题? http://stackoverflow.com/questions/38309777/accessing-local-types-from-script-executed-with-vbcodeprovider –