我需要在运行时向任何正在执行的工作流程添加一些活动(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;
}
你怎么看,这有道理吗?我发现的一个问题是你无法恢复任何正在进行的工作流实例,但我们只在几天内投入生产:)