C# Quartz.net+;NHibernate+;温莎城堡+;公共服务提供者

C# Quartz.net+;NHibernate+;温莎城堡+;公共服务提供者,c#,nhibernate,castle-windsor,quartz-scheduler,C#,Nhibernate,Castle Windsor,Quartz Scheduler,我有一个基于该框架的web应用程序。实际上,dal使用了NHibernate,我在(VIEW-CONTROLLER)和dal之间添加了一个服务层 我实际上需要实现一个调度程序来频繁地运行我的作业。我将使用Quartz.net来完成这项任务。事实上,我正面临一个问题。因为我会有很多工作,它们会以不同的时间表运行,比如每30秒、每一天、每一周 我想知道是否有一种在Quartz内部使用服务注入运行NHibernate的方法,以及它是否支持作业并发,我的意思是如果两个作业同时运行,NHibernate是

我有一个基于该框架的web应用程序。实际上,dal使用了NHibernate,我在(VIEW-CONTROLLER)和dal之间添加了一个服务层

我实际上需要实现一个调度程序来频繁地运行我的作业。我将使用Quartz.net来完成这项任务。事实上,我正面临一个问题。因为我会有很多工作,它们会以不同的时间表运行,比如每30秒、每一天、每一周

我想知道是否有一种在Quartz内部使用服务注入运行NHibernate的方法,以及它是否支持作业并发,我的意思是如果两个作业同时运行,NHibernate是否没有问题。我知道NHibernate和多线程有一些问题

我找到了Quartz.Net for Spring()的实现和Castle Windsor()的实现

问题是,我认为这个例子没有考虑到作业可以同时运行的情况,这是一个Nhibernate问题。我希望使用CommonServiceLocator更高级别,而不是将自己局限于一个IoC框架

解决此问题的最佳方法是什么?


感谢您的帮助

使用,然后在您的
IJob
中插入
ISessionManager
。这将为每个线程提供一个ISession,您应该不会有任何问题。

查看此

您计划在哪里使用CommonServiceLocator?我不知道你会如何在这里受益。在我的工作中,我使用工作流基础以更可读的方式处理逻辑。在每个活动中,我需要访问特定的服务,并使用CommonServiceLocator,因为在一行中我得到了服务:var orderService=(IOrderService)ServiceLocator.Current.GetService(typeof(IOrderService));注入IOrderService(push)而不是请求它(pull)。记住好莱坞的原则…如果你需要向你的工作流程注入服务,请参阅工作流工具()。我知道了!但是我需要注入存储库和一个管理器来让我的服务正常工作。我可以这样做的代码,我必须作出一个配置文件。我所说的代码是指Castle自动通用注入,所以我不需要手动指定每个存储库。我使用的是Sharp Arch方案,如果您需要一个示例,我可以提供一个