Creating a WF program using C# Code
In this task, we will create the same "HelloWorkflow" function workflow using pure C# code, beginning from a Console Application.
How to do it...
Create a Console Application project:
Create a new Console Application project under the
Chapter01
solution. Name the projectHelloCodeWorkflow
. The following screenshot shows the Console Application new project dialog:Add reference to the
System.Activities
assembly:By default, a new Console Application doesn't have reference to the
System.Activities
assembly, due to which we need to perform this step.Create workflow definition code:
Open
Program.cs
file and change the code present as follows:using System.Activities; using System.Activities.Statements; namespace HelloCodeWorkflow { class Program { static void Main(string[] args) { WorkflowInvoker.Invoke(new HelloWorkflow()); } } public class HelloWorkflow:Activity { public HelloWorkflow() { this.Implementation = () => new Sequence { Activities = { new WriteLine(){Text="Hello Workflow"} } }; } } }
Run it:
Set
HelloCodeWorkflow
asStartUp
project and press Ctrl+F5 to run it. As expected, the result should be just like the previous result shown.
How it works...
We use the following namespaces:
using System.Activities; using System.Activities.Statements;
Because WorflowInvoker
class belongs to System.Activities
namespace. Sequence
activity, WriteLine
activity belongs to System.Activities.Statements
. namespace.
public class HelloWorkflow:Activity { public HelloWorkflow() { this.Implementation = () => new Sequence { Activities = { new WriteLine(){Text="Hellow Workflow"} } }; } }
By implementing a class inherited from Activity, we define a workflow using imperative code.
WorkflowInvoker.Invoke(s);
This code statement loads a workflow instance up and runs it automatically. The WorkflowInvoker.Invoke
method is synchronous and invokes the workflow on the same thread as the caller.
There's more
WF4 also provides us a class DynamicActivity
by which we can create a workflow instance dynamically in the runtime. In other words, by using DynamicActivity
, there is no need to define a workflow class before initializing a workflow instance. Here is some sample code:
public static DynamicActivity GetWF() { return new DynamicActivity() { Implementation = () => new Sequence() { Activities ={ new WriteLine(){Text="Hello Workflow"} } } }; }