我创建了一个具有自定义活动 (CodeActivity) 的 Windows 工作流状态机。这些自定义活动需要访问数据库,我有一个包含数据库连接的属性。
在每个动作开始时,我都会初始化数据库上下文,做一些事情,然后处置数据库动作。这目前导致了一个问题,我认为这归结为这样一个事实,即如果同时从工作流的两个单独实例调用活动,则可以使用相同的代码活动实例。
例如,假设我的活动名为 DoSomething,如下所示:
public class DoSomething : CodeActivity
{
protected DbContext DbContext { get; set; }
protected override void Execute(CodeActivityContext context)
{
using (this.DbContext = CreateMyDatabaseContext())
{
DoSomething(this.DbContext);
}
}
}
如果工作流的两个实例同时调用 DoSomething(),那么(因为正在使用同一个 DoSomething 实例),它们将指向同一个数据库上下文。
但相反,我想要的是让活动的每次调用都使用一个新的活动实例。
如果这是不可能的,那么我知道我需要从活动中删除任何实例属性,这是一个可以接受的答案。
但我想知道是否可以使用另一种机制来拥有实例属性。例如,工作流上是否有一个属性决定如何创建活动对象(例如,每个工作流的单独实例)?或类似的东西?
谢谢你的帮助,埃里克