“工作流反射实用工具”示例

Download sample

工作流反射实用工具是一种可扩展的工具,用于从程序集中提取与工作流相关的信息。 每个工作流的层次结构、声明性规则和必需的本地服务均显示在树视图中。 这样便于浏览已编译工作流的结构。 此外,可以在记事本中或重新承载的设计器图面上以 XAML 的形式查看程序集中的每个工作流。 最后,基于替换的声明性规则计算器为用户提供了一种对包含的表达式进行“假设”分析的方法。

使用示例

按照以下步骤生成、运行和配置示例。

生成示例

  1. 通过单击本主题中的**“下载示例”**来下载该示例。

    这会将示例项目提取到本地硬盘。

  2. 单击**“开始”,依次指向“程序”“Microsoft Windows SDK”,然后单击“CMD 外壳”[CMD Shell]**。

  3. 转到示例的源目录。

  4. 在命令提示符处键入 MSBUILD <解决方案文件名>

运行示例

  • 在 SDK 命令提示窗口中,运行 WorkflowReflectionUtility\bin\debug 文件夹中的 .exe 文件,该文件夹位于该示例的主文件夹下。

将程序集加载到工作流反射实用工具中:

  1. 启动 WorkflowReflectionUtility.exe 程序

  2. 在**“File”(文件)菜单上选择“Open”(打开)**。

  3. 选择包含想要浏览的工作流内容的程序集,然后单击**“Open”(打开)**。

  4. 程序集加载后,通过展开各个节点浏览整个树视图。

    某些节点有上下文相关菜单。 WorkflowNode 就是一个例子,它支持在记事本中查看 XAML,或在重新承载的设计图面上查看工作流。

配置文件

工作流反射实用工具由应用程序配置文件控制。 此文件包含 WorkflowReflectionUtilitySection,它可将一个或多个 ReflectionComponent 对象添加到组件集合。 如果缺少该配置文件,实用工具将转而使用默认配置文件的硬编码编程版本。

默认情况下,工作流反射实用工具被配置为显示程序集中包含的所有工作流。 对于每个工作流,它将显示所有声明性规则、使用的所有 DataExchangeService 接口,以及活动层次结构。 可以通过声明性规则树节点的右击快捷菜单来访问基于替换的规则表达式计算器。 可以通过使用工作流树节点的右击快捷菜单来访问 XAML 和设计器视图。

默认配置

默认配置如下所示:

<configuration>
    <configSections>
        <section name="WorkflowReflectionUtilitySettings" type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.WorkflowReflectionUtilitySection, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
    </configSections>
    <WorkflowReflectionUtilitySettings showAssemblyResolveExplanation="true">
        <components>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.AssemblyComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.WorkflowComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.RuleComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.XomlContextMenuComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.RequiredServiceInterfacesComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.RuleEvaluatorComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.WorkflowDesignerViewComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.WorkflowActivitiesComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
        </components>
    </WorkflowReflectionUtilitySettings>
</configuration>

扩展性

工作流反射实用工具设计为可进行扩展。 若要向该工具中添加更多功能,您必须添加派生自包含两个抽象方法的 WorkflowReflectionComponent 的新组件。

public abstract void Initialize(InitializationContext context);
public abstract void PerformReflection(ReflectionContext context);

Initialize 方法

该实用工具启动时将调用 Initialize 方法。 它允许组件将自身配置为在反射时运行。将使用 InitializationContext.AddChild 以某些现有组件类型子项的形式添加当前组件。 初始化后,对此方法的调用将生成组件的树结构,该结构表示在程序集上执行反射时所采取的步骤。 例如,AssemblyComponent 将自身添加为 RootComponent 的子项,而 WorkflowComponent 将自身添加为 AssemblyComponent 的子项。 这将在反射时创建以下调用结构:“根”>“程序集”>“工作流”。 组件可以具有的子项的数目没有限制。 特定子组件可将自身添加到其中的父项的数目也没有限制。

InitializationContext.AddImage 用于将图像添加到树视图中可显示图像的列表。 将基于所有者类型和字符串名称将每个图像放入缓存中。 这两个值用作键,用于在反射时检索图像的 ImageList 索引。

PerformReflection 方法

PerformReflection 方法用于在加载程序集时执行实际工作。 ReflectionContext 为组件提供程序集、当前树节点和整个树视图的访问器。 此外,ReflectionContext 提供了用于获取所有子组件、获取以前缓存的图像索引以及创建克隆上下文的方法。

举例来说,我们可以浏览 RuleComponent。 RuleComponent 将自身添加为 WorkflowComponent 的子项,并在初始化时添加缓存的图像。 在反射时,组件访问当前树节点(一个 WorkflowNode)来获取工作流类型。 然后,它将在此类型上反射,以查找所有声明性规则并为其中每条规则添加节点。 对于组件添加的每个节点,组件将用包含新添加的规则节点的克隆 ReflectionContext 调用 WorkflowReflectionComponent.InvokeChildComponents 方法。

这种常规模式可用于向节点中添加上下文菜单、更改节点的文本、重新组织节点以及添加子节点。 有关示例和更多信息,请参见 OutOfBoxComponents.cs 文件。

配置新组件

新组件必须添加到配置文件才能运行。 有关配置文件的完整结构,请参见本主题中的“配置文件”一节。

新的组件节点看起来如下所示:

<add type="[AssemblyQualifiedName of component]"/>

例如:

<add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.AssemblyComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>

请参见

其他资源

应用程序示例
Windows Workflow Foundation 示例

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。