【发布时间】:2012-04-05 16:23:40
【问题描述】:
我有一个 .NET 4.0 ASP.NET MVC 应用程序,它还托管一个 Workflow Foundation 4.0。在此工作流中,一些自定义工作流活动将执行代码以使用 Linq to SQL 进行一些数据库更新。该代码包括调用一个方法,该方法又调用一些其他方法等......我还有一个业务层,它有一个数据访问工厂,提供对我所有包含数据库操作方法的数据访问对象的访问。
现在假设我的 WF 活动调用方法 A ,该方法又调用另一个类中的方法 B ,该方法又调用另一个类中的方法 C end D 。在这些方法中的每一个中,我都想检索我的数据访问工厂的同一个实例,以便所有数据库操作都在同一个数据库事务上执行。我将如何为我的数据访问工厂设计单例模式?请注意,方法 A、B、C 和 D 也可以从 Asp.Net MVC 控制器中调用。
当从 asp.net mvc 控制器调用方法 A、B、C 和 D 时,很简单,我可以使用 HttpContext 来存储我的数据访问工厂单例,这样在一个 http 请求中我也可以获得相同的实例我的数据访问工厂。
但是当从 Workflow 活动中调用这些方法时,当然没有 HttpContext。我尝试了线程静态变量,但在 Web 应用程序中你不确定,方法 A、B、C 和 D 将在同一个线程上调用。我也尝试过 CallContext,但我经历过,我并不总是检索同一个实例,所以显然 CallContext 也不是解决方案。
基本上,问题可以概括为“在运行在 asp.net 应用程序中的后台进程中获取对象的相同实例”(此后台任务是否被 WF 活动或其他活动踢出并不重要后台任务的方式,例如使用 Task
【问题讨论】:
标签: c# asp.net-mvc workflow-foundation-4