Jay*_*van 2 c# workflow-foundation-4
我正在使用Windows Workflow 4,我需要创建一个C#活动,基本上它继承自Sequence活动.我希望它看起来就像Sequence活动一样,因此用户可以从设计器中将其他活动拖放到它上面.但是,它在代码中的行为不同(也许我想以不同的顺序运行它们,或者在每个代码之间执行特殊操作,这应该无关紧要).
我怎样才能做到这一点?我看到一个类似的问题被问到这个问题,只有一个人回答了一个仅适用于Windows Workflow 3的建议.在版本4中,序列活动不能继承,至少可以说.
这似乎不是一个非常遥远的概念.Sequence活动作为内置活动提供.因此,它应该是可重现的,或者至少是可继承的,这似乎是合乎逻辑的,因此我可以拥有一个自定义版本的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<Activity> Activities
{
get
{
return innerSequence.Activities;
}
}
[Browsable(false)]
public Collection<Variable> Variables
{
get
{
return innerSequence.Variables;
}
}
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
metadata.AddImplementationChild(innerSequence);
}
protected override void Execute(NativeActivityContext context)
{
context.ScheduleActivity(innerSequence);
}
}
Run Code Online (Sandbox Code Playgroud)
这会将实际行为转发到私有innerSequence,这可能会使这段代码变得毫无用处,但请注意,在Execute方法中,它为我们提供了在执行前后执行操作的机会.如果我们想要提供自定义行为,我们必须实现它而不是转发到内部私有活动.
| 归档时间: |
|
| 查看次数: |
5420 次 |
| 最近记录: |