首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

WF 框架程式設計:設計器架構與活動設計器詳解

     編輯:關於C#

1. .NET 設計器基礎框架

命名空間 System.ComponentModel.Design。WinForms、ASP.NET、WF 三種設計器皆建構於此基礎之上。WF 設計器相關類別位於 System.Workflow.ComponentModel.Design。

1.1 WinForms 設計器核心介面

  • DesignerHost: 服務容器、元件管理、交易管理。
  • ISite: 綁定元件與容器,透過 GetService 取得設計器服務。
  • IDesigner: 提供設計時服務、右鍵選單命令、初始化關聯元件。
  • IToolboxService: 工具箱服務,管理 ToolboxItem,支援分類、建立器模式。

參考 SharpDevelop 開源專案可深入理解實作細節。

2. WF 設計器架構

核心概念:每個 Activity 對應一個 ActivityDesigner,配合設計介面 (Designer Surface)。此架構也為未來 Web 版 WF 設計器提供藍圖——ActivityDesigner 保持不變,僅替換宿主環境。

2.1 Activity Designer

  • 預設 DesignerAttribute 指向 ActivityDesigner。
  • 自訂 Activity 通常繼承 Activity 即可,無需重寫設計器。
  • 複合活動對應 CompositeActivityDesigner 衍生類(如 ParallelActivityDesigner、SequenceDesigner),呈現不同視覺佈局。
  • 特殊複合活動需自訂 Designer(範例:PrioritizedInterleaveDesigner 依優先屬性定位子活動)。

自訂 ActivityDesigner 實作要點

  1. 透過 IExtenderListService 加入 IExtenderProvider,配合 ProvidePropertyAttribute 在 PropertyGrid 暴露屬性。
  2. 以 DesignerAttribute 套用自訂設計器。
  3. 實作 IDesignerVerbProvider 提供右鍵選單命令修改屬性。
  4. 覆寫 Glyphs、OnPaint、OnLayoutSize、OnLayoutPosition 自訂繪圖與佈局。
  5. 實作 ActivityDesignerTheme 並透過 ActivityDesignerThemeAttribute 注入主題樣式。
  6. 工具箱項目預設對應 ActivityToolboxItem,特殊需求可繼承並覆寫 CreateComponentsCore。

2.2 設計器宿主與視圖

  • Designer Surface: 管理 DesignerHost、使用者互動、非同步載入。
  • DesignerHost: 管理元件與設計器互動、服務容器、剪貼簿、交易、元件建立/查詢、設計器載入事件。
  • DesignerView: 呈現 ActivityDesigner、視窗管理、命令路由、拖放、捲動、列印。

3. 設計器序列化

流程設計需持久化。支援序列化為 XAML、程式碼 (CodeDOM)、BPEL/DSL 等。序列化格式可在 Activity Attribute 指定。

  • TypeCodeDomSerializer:序列化為程式碼。
  • WorkflowMarkupSerializer:序列化為 XAML (XOML)。

4. 程式碼生成

若流程包含 CodeActivity 或指定 TypeCodeDomSerializer,需動態生成程式碼,於驗證後、編譯前執行,利用 CodeDOM 產出程式碼檔,最終編譯為 .NET 組件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved