Arguments dynamiques
Cette rubrique s'applique à Windows Workflow Foundation 4.
Cet exemple montre comment implémenter une activité pour laquelle les arguments sont définis par le consommateur de l'activité plutôt que par l'auteur de l'activité. Pour ce faire, il substitue la façon dont le runtime construit les métadonnées de l'activité.
Détails de l'exemple
Avant l'exécution, le runtime génère une description d'une activité en examinant les membres publics du type d'activité et en déclarant automatiquement les arguments, les variables, les activités enfants et les délégués d'activité en tant qu'éléments des métadonnées d'une activité. Il s'assure ainsi que la construction d'un workflow est correcte, et gère les relations à l'exécution et les règles de durée de vie. En général, un auteur d'activité définit les arguments d'une activité en spécifiant des membres publics sur le type d'activité qui dérivent d'Argument. Pour chaque membre public qui dérive d'Argument, le runtime crée un RuntimeArgument et le lie à l'ensemble d'arguments fourni par l'utilisateur sur ce membre. Dans certains cas, toutefois, le consommateur de l'activité fournit une configuration qui détermine l'ensemble d'arguments. Un auteur d'activité substitue CacheMetadata pour personnaliser la façon dont les métadonnées de l'activité sont générées, ce qui inclut l'ensemble d'arguments associé à l'activité.
Cet exemple montre comment générer dynamiquement une liste d'arguments pour une activité qui appelle une méthode. Le consommateur de l'activité spécifie le type et le nom de la méthode qu'ils veulent appeler avec une collection d'arguments à passer à cette méthode.
Remarque : |
---|
Le but de cet exemple est de montrer comment substituer CacheMetadata et comment utiliser RuntimeArgument. Il y a plusieurs points à noter concernant les types des méthodes que cette activité peut appeler. Par exemple, elle ne fonctionne pas avec des génériques ou des tableaux de paramètres. L'activité InvokeMethod fournie dans le .NET Framework traite ces cas, et plus encore. |
L'activité MethodInvoke
substitue CacheMetadata et commence par créer un RuntimeArgument pour gérer le résultat de l'appel de méthode. Elle lie ce RuntimeArgument à l'OutArgument définissable publiquement nommé Result
. Si MethodInvoke.Result
est Null, le runtime le remplit automatiquement avec un OutArgument configuré avec l'expression par défaut pour son type. Ce comportement signifie qu'un auteur d'activité n'a jamais besoin de vérifier si une propriété d'argument est Null.
Ensuite, la substitution CacheMetadata détermine le MethodInfo
qu'il utilise pour l'appel du MethodName
et du TargetType
fournis par l'utilisateur. La méthode DetermineMethodInfo
prend le paramètre CodeActivityMetadata passé à la substitution CacheMetadata afin que toutes les erreurs de configuration puissent être signalées en tant qu'erreurs de validation. Pour ce faire, il suffit d'appeler metadata.AddValidationError
.
Une fois MethodInfo
défini, l'exemple itère au sein des paramètres MethodInfo
. Pour chaque paramètre, il crée un RuntimeArgument et le lie à l'argument correspondant dans la collection fournie par l'utilisateur de la propriété Parameters
. Enfin, la collection de RuntimeArgument est associée à l'activité en appelant metadata.SetArgumentsCollection
.
Notez que la résolution des arguments peut s'effectuer à l'aide d'un RuntimeArgument, comme dans le cas de resultArgument
, ou de l'argument fourni par l'utilisateur, comme dans le cas de la collection Parameters
.
Pour utiliser cet exemple
À l'aide de Visual Studio 2010, ouvrez le fichier DynamicArguments.sln.
Pour générer la solution, appuyez sur F6.
Pour exécuter la solution, appuyez sur CTRL+F5.
Remarque : |
---|
Les exemples peuvent déjà être installés sur votre ordinateur. Recherchez le répertoire (par défaut) suivant avant de continuer.
<LecteurInstall>:\WF_WCF_Samples
Si ce répertoire n'existe pas, rendez-vous sur la page (éventuellement en anglais) des exemples Windows Communication Foundation (WCF) et Windows Workflow Foundation (WF) pour .NET Framework 4 pour télécharger tous les exemples Windows Communication Foundation (WCF) et WF. Cet exemple se trouve dans le répertoire suivant.
<LecteurInstall>:\WF_WCF_Samples\WF\Basic\CustomActivities\Code-Bodied\DynamicArguments
|