我有一个.NET 4.0 ASP.NET MVC应用程序,它也承载了Workflow Foundation 4.0。在这个工作流程中,一些自定义工作流活动将执行代码,以使用Linq to SQL进行一些数据库更新。代码包括调用一个方法,该方法又调用一些其他方法等......我也有一个业务层,它有一个数据访问工厂,提供对包含数据库操作方法的所有数据访问对象的访问。从工作流活动中访问当前的HttpContext?
现在假设我的WF活动调用方法A,而方法A又调用另一个类中的方法B,该方法在另一个类中调用方法C结束D.在每个这些方法中,我想检索我的数据访问工厂的同一个实例,以便所有数据库操作都在相同的数据库事务中执行。我将如何为我的数据访问工厂设计单例模式?请注意,方法A,B,C和D也可以从Asp.Net MVC控制器调用。当方法A,B,C和D从asp.net mvc控制器中调用时,很容易,我可以使用HttpContext来存储我的数据访问工厂单例,这样在一个http请求中我也可以得到相同的实例我的数据访问工厂。
但是,当从Workflow活动调用这些方法时,当然没有HttpContext。我尝试了线程静态变量,但在Web应用程序中您不确定,方法A,B,C和D将在同一个线程中调用。我也尝试过CallContext,但我经历过,我并不总是检索同一个实例,所以显然CallContext也不是解决方案。
基本上,这个问题可以概括为'在asp.net应用程序中运行的后台进程中获取对象的相同实例'(无论此后台任务是由WF活动启动还是另一种背景任务的方式,例如使用任务<T>)
看看我在那里做了什么? – Will 2012-04-09 11:39:54