WF4.0 入门系列(二) The CodeActivity

来源:互联网 发布:如何查域名在哪里备案 编辑:程序博客网 时间:2024/05/01 13:02

 

就像我们现在看到的,WF4使用一个设计器designer来编辑.xaml文件,一个运行时runtime来运行活动。当你创建一个workflow的同时,你也就是在创建一个新的活动类型,由于所有的活动都继承与System.Activities.Activity或其子类,所以你可以使用C#、VB或XAML来声明一个工作流。在本次练习,我们将使用C#创建一个活动,并以此实现我们的"问候"流程。

我们在前面提到,活动Activity可以实现业务流程。但是我们也可以让某些活动去调用其他活动来实现这一功能。现在我们来创建一个SayHello的Activity,SayHelloActivity本身不会直接向控制台输出字符串,而是调用一个WriteLine活动来完成此操作。

我们现在创建一个工作流控制台应用程序,并向其他添加一个SayHelloActivity.cs类,并让其继承System.Activities.Activity

    public sealed class SayHelloActivity : Activity    {        WriteLine writeLine = new WriteLine() { Text = "Hello Workflow 4" };        public SayHelloActivity()        {            //Implementation是一个返回包含执行逻辑的 System.Activities.Activity 的委托。            Implementation = () => { return writeLine; };        }    }


 修改Program.cs如下:

    class Program    {        static void Main(string[] args)        {            Activity sayHello = new SayHelloActivity();            WorkflowInvoker.Invoke(sayHello);            Console.Read();        }    }

从上面的例子可以看到,采用根据其他活动创建Workflow的方法证明是可行的。但是有很多情况下,我们希望创建的Activity可以执行一些业务逻辑或者可以调用可以执行类似逻辑的其他类。如果是这样,我们可以让我们的Activity继承于System.Activities.CodeActivity,并重写Execute 方法。CodeActivity是一个抽象类,所以我们必须重写Executed方法。

public sealed class SayHelloInCode : CodeActivity{    protected override void Execute(CodeActivityContext context)    {        Console.WriteLine("Hello Workflow 4 in code");    }}public sealed class SayHelloInCode : CodeActivity{    protected override void Execute(CodeActivityContext context)    {        Console.WriteLine("Hello Workflow 4 in code");    }}

 

修改main方法如下:

static void Main(string[] args){    WorkflowInvoker.Invoke(new SayHelloInCode());}


 

系列文章:

一 Hello Workflow4

二 The CodeActivity

三 Dynamic Workflows with XAML

四 Testing Workflows

五 WorkflowApplication

六 If/Else Logic