Workflow Foundation 4工作流在持久性之后保留对象引用

时间:2013-06-17 14:13:46

标签: .net workflow-foundation-4

我无法找到这个问题的明确答案。是否保证在持久性之后保留对象引用?

例如,我有一个具有一堆属性的对象,我将此对象传递给许多不同的活动,这些活动会更改此对象内的数据。在保持并恢复工作流之后,是否保证所有活动都具有对同一对象实例的引用?

或者,通过参数或变量引用此对象的各种活动是否可能以副本结束?

2 个答案:

答案 0 :(得分:1)

你实际上在这里问了两个不同的问题:

用于调用活动的语义是什么?

它与普通的.net函数调用相同。引用类型(对象)通过引用传递,值类型(bool,int,struct,...)通过值(= copy)传递。因此,如果您继承了自己的类public class MyClass {....},它将仅传递引用,并且您的所有活动都在同一个实例上工作。

哪些数据会保留?

完整实例已序列化并保留。这意味着恢复后您的所有字段都将在那里。您的班级必须是可序列的,或者使用[DataContract]属性进行装饰。另见此评论: Windows Workflow Foundation 4.0 and Persistence

答案 1 :(得分:1)

由于活动是连续的,因此您一次只能使用一项活动。因此,一旦活动完成,它是否具有与后续活动相同的对象的引用并不重要,因为第一个活动已超出范围。

所以,是的,你将获得获得相同引用对象的所有活动的效果。 除了使用并行活动之外,代码执行点只在一个活动中,因此当您持久化时,只保留对象的一个​​“版本”。当你从持久化中恢复它使用其属性恢复的对象时,可以在后续活动之间传递。

我这样做是通过使对象成为我的流程图活动顶层的变量并将其交给流程图中的代码活动