Generieren von Code mithilfe von benutzerdefinierten Aktivitäten
Sie können Code für eine benutzerdefinierte Aktivität durch Verwendung eines von ActivityCodeGenerator oder CompositeActivityCodeGenerator abgeleiteten Typs und durch Zuweisen des Codes zur benutzerdefinierten Aktivität (mithilfe von ActivityCodeGeneratorAttribute) generieren. GenerateCode muss überschrieben werden. Es wird während der Workflowkompilierung aufgerufen und ermöglicht das Hinzufügen von zusätzlichem Code zur partiellen Workflowklasse, die vom Compiler generiert wird. Das Objekt wird in Form von CodeDOM generiert, bevor es an den C#-Compiler übergeben wird. Dieses Szenario kann für Webdienstaktivitäten, wo Sie eine Proxyklasse dynamisch generieren können, oder auch für andere Szenarien hilfreich sein, in denen von der Aktivität Code auf Grundlage der Konfiguration für die Verwendung während der Laufzeit ausgegeben werden muss.
Im folgenden Beispiel wird veranschaulicht, wie Code für die benutzerdefinierte Aktivität generiert wird.
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.
}
Soll der benutzerdefinierte Codegenerator der benutzerdefinierten Aktivität zugewiesen werden, muss die Aktivität dem folgenden Beispiel entsprechend mit ActivityCodeGeneratorAttribute ergänzt werden.
[ActivityCodeGenerator(typeof(CustomCodeGenerator))]
Weitere Informationen zur Verwendung von CodeDOM finden Sie unter Using the CodeDOM.
Hinweis
Es ist nicht erforderlich, CodeDomProvider oder einen der CodeDOM-Compilertypen im System.CodeDOM.Compiler-Namespace zu verwenden, wenn CodeDOM in der benutzerdefinierten ActivityCodeGenerator-Implementierung verwendet wird.
Siehe auch
Konzepte
Erstellen von benutzerdefinierten Aktivitäten
Weitere Ressourcen
Entwickeln von Workflowaktivitäten
Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.