到目前为止,我们已经使用.xaml(拖拽)和.cs代码方式创建过Workflow,这些代码文件会编译成程序集中的类,然后被工作流运行时调用运行。
相对于使用c#创建Workflow,.xaml文件有以下优势:
动态工作流Dynamic Workflow可以帮助我们在运行时决定加载和运行什么业务逻辑。
下面我们创建一个SayHello.xaml,然后在解决方案外对其进行修改,最后领用工作流宿主运行此工作流
1、创建SayHello.xaml
2、通知VS将SayHello.xaml视为一个发布内容而不仅仅是代码。
2.1 在解决方案中选中SayHello.xaml,右键---》属性
2.2 将【复制到输出目录】,从“不复制”改为“始终复制”
2.3 将【生成操作】,从“XamlAppDef”改为“内容
2.4 将【自定义工具】从“MSBuild:Compile”改为空
3. 在前面我们的Workflow都会编译成一个类class。为了能够让WorkflowInvoker从.xaml文件中引用(invoke)Workflow,我们必须使用ActivityXamlServices来将.xaml加载到内存并创建一个WorkflowInvoker可以引用活动实例。注意,当此Workflow被引用时,所有.xaml文件中引用的程序集都是可以得到的。
3.1 在Program.cs添加引用:
using System.Activities.XamlIntegration;
3.2 修改main方法
static void Main(string[] args) { Activity sayHello = ActivityXamlServices.Load("SayHello.xaml"); WorkflowInvoker.Invoke(sayHello); Console.ReadKey(false); }
4. 修改已经发布的SayHello.xaml文件
4.1 重新生成解决方案,你会发现SayHello.xaml文件被发布到debug文件夹下
4.2 以文本文件方式打开该文件
4.3 修改输出的字符串内容为“Hello Workflow 4 XAML”
4.4 运行HelloWorkflow.exe可执行文件
5. 最后请将SayHello.xaml文件的属性值以及Program main方法的代码该回到最初状态 ,以便我们进行下一练习。
系列文章:
一 Hello Workflow4
二 The CodeActivity
三 Dynamic Workflows with XAML
四 Testing Workflows
五 WorkflowApplication
六 If/Else Logic