如何生成使用自定义活动的代码
通过使用从 ActivityCodeGenerator 或 CompositeActivityCodeGenerator 派生的类型,并利用 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 时,不需要使用 CodeDomProvider 或 System.CodeDOM.Compiler 命名空间中的任何 CodeDOM 编译器类型。
请参见
概念
其他资源
版权所有 (C) 2007 Microsoft Corporation。保留所有权利。