Dynamische Argumente
Dieses Thema gilt für Windows Workflow Foundation 4.
In diesem Beispiel wird veranschaulicht, wie eine Aktivität implementiert wird, deren Argumente statt vom Autor vom Consumer der Aktivität definiert werden. Hierzu wird die Methode überschrieben, mit der die Laufzeit die Metadaten der Aktivität erstellt.
Beispieldetails
Vor der Ausführung erstellt die Laufzeit die Beschreibung einer Aktivität, indem die öffentlichen Member des Aktivitätstyps analysiert und Argumente, Variablen, untergeordnete Aktivitäten und Aktivitätsdelegaten als Teil der Aktivitätsmetadaten deklariert werden. Dies dient der Sicherstellung der korrekten Workflowerstellung sowie der Verwaltung von Laufzeitbeziehungen und Lebensdauerregeln. In der Regel werden die Argumente einer Aktivität vom Aktivitätsautor durch Angabe von öffentlichen Membern des Aktivitätstyps definiert, die von Argument abgeleitet werden. Für jeden von Argument abgeleiteten öffentlichen Member erstellt die Laufzeit ein RuntimeArgument und bindet dieses an das vom Benutzer bereitgestellte Argument für diesen Member. In einigen Fällen jedoch stellt der Consumer der Aktivität Konfigurationswerte bereit, die den Satz der Argumente bestimmen. Ein Aktivitätsautor überschreibt CacheMetadata, um die Methode zur Erstellung von Aktivitätsmetadaten anzupassen, darunter auch der mit der Aktivität verknüpfte Satz von Argumenten.
In diesem Beispiel wird veranschaulicht, wie eine Argumentliste für eine Aktivität, die eine Methode aufruft, dynamisch erstellt wird. Der Consumer der Aktivität gibt den Typ und den Namen der Methode an, die aufgerufen werden soll, sowie eine Auflistung von Argumenten, die an diese Methode übergeben werden sollen.
Hinweis: |
---|
Anhand dieses Beispiels wird veranschaulicht, wie CacheMetadata überschrieben wird und wie RuntimeArgument verwendet wird. Hinsichtlich der Arten von Methoden, die mit dieser Aktivität aufgerufen werden können, sind mehrere Einschränkungen zu beachten. Sie funktioniert beispielsweise nicht mit Generika oder Parameterarrays. Diese und andere Fälle werden mit der im Lieferumfang von .NET Framework enthaltenen InvokeMethod-Aktivität behandelt. |
Die MethodInvoke
-Aktivität überschreibt CacheMetadata und beginnt mit der Erstellung eines RuntimeArgument-Elements zur Behandlung der Ergebnisse des Methodenaufrufs. Sie bindet dieses RuntimeArgument an das öffentlich einstellbare OutArgument mit dem Namen Result
. Wenn MethodInvoke.Result
den Wert NULL aufweist, fügt die Laufzeit automatisch ein mit dem Standardausdruck für diesen Typ konfiguriertes OutArgument ein. Auf diese Weise muss der Autor einer Aktivität nicht prüfen, ob die Eigenschaft eines Arguments NULL ist.
Als Nächstes ermittelt die CacheMetadata-Überschreibung das für den Aufruf verwendete MethodInfo
-Element anhand des vom Benutzer bereitgestellten MethodName
und TargetType
. Die DetermineMethodInfo
-Methode verwendet den an die CacheMetadata-Überschreibung übergebenen CodeActivityMetadata-Parameter, sodass alle Konfigurationsfehler als Validierungsfehler gemeldet werden können. Hierzu wird metadata.AddValidationError
aufgerufen.
Nachdem das MethodInfo
-Element festgelegt wurde, werden die MethodInfo
-Parameter durchlaufen. Für jeden Parameter wird ein RuntimeArgument erstellt und an das entsprechende Argument in der vom Benutzer bereitgestellten Auflistung der Parameters
-Eigenschaft gebunden. Zum Schluss wird die RuntimeArgument-Auflistung durch Aufruf von metadata.SetArgumentsCollection
der Aktivität zugeordnet.
Beachten Sie, dass zur Argumentauflösung ein RuntimeArgument (wie im Fall von resultArgument
) oder ein vom Benutzer bereitgestelltes Argument (wie im Fall der Parameters
-Auflistung) verwendet werden kann.
So verwenden Sie dieses Beispiel
Öffnen Sie in Visual Studio 2010 die Datei "DynamicArguments.sln".
Drücken Sie F6, um die Projektmappe zu erstellen.
Drücken Sie STRG+F5, um die Projektmappe auszuführen.
Hinweis: |
---|
Die Beispiele sind möglicherweise bereits auf dem Computer installiert. Überprüfen Sie das folgende (standardmäßige) Verzeichnis, bevor Sie fortfahren.
<Installationslaufwerk>:\WF_WCF_Samples
Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)- und WF-Beispiele herunterzuladen. Dieses Beispiel befindet sich im folgenden Verzeichnis.
<Installationslaufwerk>:\WF_WCF_Samples\WF\Basic\CustomActivities\Code-Bodied\DynamicArguments
|