使用 DynamicActivity 在运行时创建活动

DynamicActivity 是一个带有公共构造函数的具体的密封类。 DynamicActivity 可用于使用活动 DOM 在运行时组合活动功能。

DynamicActivity 功能

DynamicActivity 有权访问执行属性、参数和变量,但无权访问运行时服务,例如计划子活动或跟踪。

可以使用工作流 Argument 对象设置顶级属性。 在命令性代码中,这些参数是使用新类型的 CLR 属性创建的。 在 XAML 中,它们使用x:Classx:Member标记声明。

使用 DynamicActivity 构造的活动使用 ICustomTypeDescriptor 与设计器交互。 在设计器中创建的活动可以使用 Load 动态加载,具体演示请参见以下过程。

使用命令性代码在运行时创建活动

  1. OpenVisual Studio 2010。

  2. 选择 “文件”、“ 新建”、“ 项目”。 在“项目类型”窗口中选择 Visual C# 下的“工作流 4.0”,然后选择 v2010 节点。 在“模板”窗口中选择“顺序工作流控制台应用程序”。 将新项目命名为 DynamicActivitySample。

  3. 右键单击 HelloActivity 项目中的 Workflow1.xaml,然后选择“ 删除”。

  4. 打开 Program.cs。 将以下指令添加到文件顶部。

    using System.Collections.Generic;  
    
  5. Main 方法的内容替换为以下代码,该代码创建一个包含单个 Sequence 活动的 WriteLine 活动,并将其分配给新动态活动的 Implementation 属性。

    //Define the input argument for the activity  
    var textOut = new InArgument<string>();  
    //Create the activity, property, and implementation  
                Activity dynamicWorkflow = new DynamicActivity()  
                {  
                    Properties =
                    {  
                        new DynamicActivityProperty  
                        {  
                            Name = "Text",  
                            Type = typeof(InArgument<String>),  
                            Value = textOut  
                        }  
                    },  
                    Implementation = () => new Sequence()  
                    {  
                        Activities =
                        {  
                            new WriteLine()  
                            {  
                                Text = new InArgument<string>(env => textOut.Get(env))  
                            }  
                        }  
                    }  
                };  
    //Execute the activity with a parameter dictionary  
                WorkflowInvoker.Invoke(dynamicWorkflow, new Dictionary<string, object> { { "Text", "Hello World!" } });  
                Console.ReadLine();  
    
  6. 执行应用程序。 显示文本“Hello World!”的控制台窗口。

使用 XAML 在运行时创建活动

  1. 打开 Visual Studio 2010。

  2. 选择 “文件”、“ 新建”、“ 项目”。 在“项目类型”窗口中选择 Visual C# 下的“工作流 4.0”,然后选择 v2010 节点。 在“模板”窗口中选择“工作流控制台应用程序”。 将新项目命名为 DynamicActivitySample。

  3. 在 HelloActivity 项目中打开 Workflow1.xaml。 单击设计器底部的 “参数 ”选项。 创建一个 In 类型的新 TextToWrite 自变量,并将其命名为 String

  4. 将“WriteLine”活动从工具箱的“基元”部分拖放到设计器图面中。 将值 TextToWrite 分配给活动的 Text 属性。

  5. 打开 Program.cs。 将以下指令添加到文件顶部。

    using System.Activities.XamlIntegration;  
    
  6. 将方法的内容 Main 替换为以下代码。

    Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml");  
                    results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } });  
    Console.ReadLine();  
    
  7. 执行应用程序。 将显示文本为“Hello World!”的控制台窗口。

  8. 右键单击 解决方案资源管理器 中的 Workflow1.xaml 文件,然后选择“ 查看代码”。 请注意,活动类是使用x:Class创建的,属性是使用x:Property创建的。

另请参阅