1

我正在将遗留工作流系统转换为 WF4,因此我必须跳过几个环节才能使其与我们应用程序的 api 匹配。所以我会尽量让问题解释尽可能简单。:)

我有一个自定义活动,它接受一个序列作为参数,然后执行它。在执行它之前,自定义活动需要遍历序列(以及它的分支等)以查找特定类型的子活动 - 然后它会对这些特定的子活动进行一些报告。

我知道当约束可以使用 GetChildSubtree 活动时,可以在验证期间遍历活动的子子树,但这并不能让我在运行时访问列表。我也知道也可以使用主机应用程序中的 ActivityValidationServices 执行类似的调用,但这也不适用于我的场景。

那么从自定义活动的执行方法中获取子子树中活动列表的最佳方法是什么?

提前致谢!

马库斯。

4

1 回答 1

2

您可能想看看WorkflowInspectionServices类,它提供了使用活动树的运行时元数据的方法。特别是GetActivities方法。

GetActivities 返回活动的所有直接子项,包括活动、委托处理程序、变量默认值和参数表达式。您现在可以编写一个扩展方法来返回所有活动,包括内部分支:

public static IEnumerable<Activity> GetInnerActivities(this Activity activity)
{
    var children = WorkflowInspectionServices.GetActivities(activity);

    foreach (var child in children)
    {
        children = children.Concat(child.GetChildren());
    }

    return children;
}

现在获取指定类型的所有活动的内部活动:

activity.GetInnerActivities().OfType<MySpecificType>();
于 2012-09-21T21:46:19.387 回答