DynamicActivity 是具有公用建構函式的具象密封類別。 DynamicActivity 可用於在執行時使用活動 DOM 組合活動功能。
DynamicActivity 功能
DynamicActivity 能存取執行屬性、參數與變數,但無法存取執行時服務,如排程子活動或追蹤。
最上層屬性可以使用工作流程 Argument 對象來設定。 在命令式程式代碼中,這些自變數是使用新類型的CLR屬性所建立。 在 XAML 中,會使用 x:Class 和 x:Member 標記來宣告它們。
使用 DynamicActivity 介面來建構活動,並使用搭配設計工具 ICustomTypeDescriptor 的設計師。 設計器中建立的活動可以使用Load 動態載入,如下列程序所示。
在運行期間使用指令式程式碼建立活動
OpenVisual Studio 2010。
選取 [檔案]、[ 新增]、[ 專案]。 在 [項目類型] 視窗中,選取 [Visual C#] 底下的 [工作流程 4.0],然後選取 v2010 節點。 在 [範本] 視窗中選取 [循序工作流程控制台應用程式]。 將新專案命名為 DynamicActivitySample。
以滑鼠右鍵按兩下 HelloActivity 專案中的 Workflow1.xaml,然後選取 [ 刪除]。
開啟 Program.cs。 將下列指示詞新增至檔案頂端。
using System.Collections.Generic;將
Main方法的內容替換為以下程式碼,該程式碼會建立一個活動,其中包含單一Sequence活動,並將此活動指派給新的動態活動的WriteLine屬性。//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();執行應用程式。 控制台視窗,其中顯示 “Hello World!” 文字。
在執行時使用 XAML 建立活動
開啟 Visual Studio 2010。
選取 [檔案]、[ 新增]、[ 專案]。 在 [項目類型] 視窗中,選取 [Visual C#] 底下的 [工作流程 4.0],然後選取 v2010 節點。 在 [範本] 視窗中選取 [工作流程主控台應用程式]。 將新專案命名為 DynamicActivitySample。
在 HelloActivity 專案中開啟 Workflow1.xaml。 點擊設計工具底部的 [參數] 選項。 建立一個名為
In且類型為TextToWrite的新String引數。將 WriteLine 活動從工具箱的 Primitives 區段拖曳至設計工具介面。 將值
TextToWrite指派給活動的 Text 屬性。開啟 Program.cs。 將下列指示詞新增至檔案頂端。
using System.Activities.XamlIntegration;使用以下程式代碼取代
Main方法的內容。Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml"); results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } }); Console.ReadLine();執行應用程式。 控制台視窗會出現 “Hello World!” 文字。
以滑鼠右鍵點擊 Solution Explorer 中的 Workflow1.xaml 檔案,然後選取 檢視程式碼。 請注意,活動類別是使用
x:Class建立,而 屬性是使用x:Property建立的。