如何在运行时向工作流定义添加活动?

时间:2017-09-12 10:15:40

标签: c# workflow-foundation-4 workflow-foundation

我需要在运行时向任何正在执行的工作流程添加一些活动(Persist就是其中之一)。

到目前为止,已完成的方法是封装加载的工作流程(实际上它似乎是一个DynamicActivity),并使用这样的序列:

private Activity WrapRootActivity(Activity activity)
{
    var sequence = new Sequence
    {
        Activities =
        {
            new Persist(),
            activity
        }
    };

    return sequence;
}

我发现的一个问题是,由于根活动现在是一个序列,因此您无法再从此工作流中获取out参数。我越是想到它,我发现使用其他东西作为根活动很奇怪。

我提出的解决方案是使用我写的这个辅助方法:

public static void InsertStartingActivities(this DynamicActivity original, params Activity[] startingActivities)
{
    var sequence = new Sequence();
    foreach(var startingActivity in startingActivities)
    {
        sequence.Activities.Add(startingActivity);
    }
    sequence.Activities.Add(original.Implementation());

    original.Implementation = () => sequence;
}

你怎么看,这有道理吗?我发现的一个问题是你无法恢复任何正在进行的工作流实例,但我们只在几天内投入生产:)

0 个答案:

没有答案