大多数时候,我在Windows Workflow Foundation 4编译工作流时,它非常简单和方便,先设计工作流 ,然后编译,在运行时就会有一个用于创建和运行工作流的.NET类型。主要缺点是,这种方法不是很灵活 ,有时你希望能够在运行时改变您的工作流的定义或者将它存储在数据库中,重新编译是不可取的。
幸运的是,我们还可以从XAML文件本身加载工作流和执行返回的工作流活动。使用 ActivityXamlServices类能做到这些,它将让我们加载XAML文件并返回一个活动,确切地说,它返回一个 封装好流程定义的DynamicActivity。
最简单的方法就是传递一个文件名做参数调用Load() ,例如:
Activity workflow = ActivityXamlServices.Load("YourWorkflow.xaml");
如果您使用本地程序集中的活动或其他类型,这是要失败的,但你可以用稍微详细方式去实现,例如 :
var settings = new XamlXmlReaderSettings() { LocalAssembly = typeo (SendForManualApproval).Assembly };
var reader = new XamlXmlReader("YourWorkflow.xaml", settings);
Activity workflow = ActivityXamlServices.Load(reader);
需要使用XamlXmlReaderSettings来说明XAML需要引用那些本地的程序集。
备注:这篇文章的使用环境是.NET framework 4.0 RC 1
原文:http://msmvps.com/blogs/theproblemsolver/archive/2010/03/07/loading-xaml-workflows -in-wf4.aspx