如何生成使用自定义活动的代码

通过使用从 ActivityCodeGeneratorCompositeActivityCodeGenerator 派生的类型,并利用 ActivityCodeGeneratorAttribute 将该类型与自定义活动关联起来,可以为该自定义活动生成代码。 在工作流编译期间,将调用 GenerateCode,它允许向编译器生成的工作流分部类添加其他代码。在将它传递给 C# 编译器之前,必须以 CodeDOM 形式对其进行重写。 在可以实时生成代理类的 Web 服务活动中,或者在活动需要基于它在运行时使用的配置发出代码的其他情况下,此方案将十分有用。

下面的示例演示如何为自定义活动生成代码。

public override void GenerateCode(CodeGenerationManager manager, object obj)
{
    if (manager == null)
    {
        throw new ArgumentNullException("The CodeGenerationManager object is null.");
    }

    if (obj == null)
    {
        throw new ArgumentNullException("The object to generate code for is null.");
    }

    // Cast obj to your custom activity for access to its members.
    Activity1 customActivity = obj as Activity1;

    if (customActivity == null)
    {
        throw new ArgumentException("The obj variable cannot be cast to the Activity type.");
    }

    // Retrieve a type provider object.
    ITypeProvider typeProvider = (ITypeProvider)manager.GetService(typeof(ITypeProvider));

    if (typeProvider == null)
    {
        throw new InvalidOperationException();
    }

    // TODO: Use types in the System.CodeDOM namespace to generate 
    // code. 
}

若要将自定义代码生成器与自定义活动关联在一起,必须使用 ActivityCodeGeneratorAttribute 修饰活动,如下面的示例所示。

[ActivityCodeGenerator(typeof(CustomCodeGenerator))]

有关使用 CodeDOM 的更多信息,请参见Using the CodeDOM

备注

当在自定义 ActivityCodeGenerator 实现中使用 CodeDOM 时,不需要使用 CodeDomProviderSystem.CodeDOM.Compiler 命名空间中的任何 CodeDOM 编译器类型。

请参见

概念

创建自定义活动

其他资源

开发工作流活动

Footer image

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