Windows工作流自定义序列活动

我正在使用Windows Workflow 4,我需要创建一个C#活动,基本上它inheritance自Sequence活动。 我希望它看起来就像Sequence活动一样,因此用户可以从设计器中将其他活动拖放到它上面。 但是,它在代码中的行为不同(也许我想以不同的顺序运行它们,或者在每个代码之间执行特殊操作,这应该没关系)。

我怎样才能做到这一点? 我看到一个类似的问题被问到这个问题,只有一个人回答了一个仅适用于Windows Workflow 3的建议。在版本4中,序列活动不能inheritance,至少可以说。

这似乎不是一个非常遥远的概念。 Sequence活动作为内置活动提供。 因此,它应该是可重现的,或者至少是可inheritance的,这似乎是合乎逻辑的,所以我可以有一个自定义版本的Sequence活动。

有人有主意吗?

WF 4中已经提供了“System.Activities.Core.Presentation.SequenceDesigner”设计器。然后,可以编写一个Sequence活动并将此设计器用于外部类。

这是一个有效的例子:

using System.Activities; using System.Activities.Statements; using System.Collections.ObjectModel; using System.ComponentModel; [Designer("System.Activities.Core.Presentation.SequenceDesigner, System.Activities.Core.Presentation")] public class MySeq : NativeActivity { private Sequence innerSequence = new Sequence(); [Browsable(false)] public Collection Activities { get { return innerSequence.Activities; } } [Browsable(false)] public Collection Variables { get { return innerSequence.Variables; } } protected override void CacheMetadata(NativeActivityMetadata metadata) { metadata.AddImplementationChild(innerSequence); } protected override void Execute(NativeActivityContext context) { context.ScheduleActivity(innerSequence); } } 

这会将实际行为转发到私有innerSequence,这可能会使这段代码变得无用,但请注意,在Execute方法中,它为我们提供了在执行之前和之后执行操作的机会。 如果我们想要提供自定义行为,我们必须实现它而不是转发到内部私有活动。