Compartir a través de


Argumentos dinámicos

Este tema es aplicable a Windows Workflow Foundation 4.

En este ejemplo se muestra cómo implementar una actividad para la que define los argumentos el consumidor de la actividad y no su autor. Para ello se invalida la forma en que el motor en tiempo de ejecución construye los metadatos de la actividad.

Detalles del ejemplo

Antes de la ejecución, el motor en tiempo de ejecución compila una descripción de una actividad mediante el examen de los miembros públicos del tipo de actividad y la declaración automática de los argumentos, variables, actividades secundarias y delegados de actividad como parte de los metadatos de una actividad. Esto lo realiza para asegurar la construcción correcta de un flujo de trabajo, así como para administrar relaciones en tiempo de ejecución y reglas de duración. Normalmente un autor de actividad define los argumentos de una actividad especificando los miembros públicos en el tipo de actividad que derivan de Argument. Por cada miembro público que deriva de Argument, el motor en tiempo de ejecución crea una clase RuntimeArgument y la enlaza con el argumento proporcionado por el usuario en dicho miembro. En algunos casos, sin embargo, el consumidor de la actividad proporciona alguna configuración que determina el conjunto de argumentos. Un autor de actividad invalida el método CacheMetadata para personalizar la manera en que se compilan los metadatos de la actividad, lo que incluye el conjunto de argumentos asociados a la actividad.

En este ejemplo se muestra cómo compilar dinámicamente una lista de argumentos para una actividad que invoca un método. El consumidor de la actividad especifica el tipo y el nombre del método que desea invocar junto con una colección de argumentos que se van a pasar a ese método.

Ee663219.note(es-es,VS.100).gifNota:
Este ejemplo pretende mostrar cómo invalidar el método CacheMetadata y cómo usar la clase RuntimeArgument. Existen algunas advertencias con respecto a los tipos de métodos que esta actividad puede invocar. Por ejemplo, no funciona con genéricos ni con matrices de parámetros. La actividad InvokeMethod que se distribuye con .NET Framework controla estos y otros casos.

La actividad MethodInvoke invalida el método CacheMetadata y comienza creando una clase RuntimeArgument para administrar cualquier resultado de la invocación del método. Enlaza esta clase RuntimeArgument a la clase OutArgument que se puede establecer públicamente denominada Result. Si MethodInvoke.Result es null, el motor en tiempo de ejecución lo rellena automáticamente con una clase OutArgument configurada con la expresión predeterminado para su tipo. Este comportamiento significa que un autor de actividad nunca tiene que comprobar si una propiedad de argumento es null.

A continuación, la invalidación del métodoCacheMetadata determina la clase MethodInfo que utiliza para la invocación desde los parámetros MethodName y TargetType proporcionados por el usuario. El método DetermineMethodInfo toma el parámetro CodeActivityMetadata pasado a la invalidación del método CacheMetadata de forma que los errores de configuración se puedan notificar como errores de validación. Esto se hace llamando a metadata.AddValidationError.

Una vez establecido el parámetro MethodInfo, el ejemplo recorre en iteración los parámetros MethodInfo. Para cada parámetro, crea una clase RuntimeArgument y la enlaza con el argumento correspondiente en la colección proporcionada por el usuario de la propiedad Parameters. Por último, la colección de RuntimeArguments se asocia a la actividad llamando a metadata.SetArgumentsCollection.

Observe que la resolución de argumento se puede realizar mediante una clase RuntimeArgument, como en el caso de resultArgument o el argumento proporcionado por usuario, como en el caso de la colección Parameters.

Para utilizar este ejemplo

  1. Mediante Visual Studio 2010, abra el archivo DynamicArguments.sln.

  2. Presione F6 para compilar la solución.

  3. Presione CTRL+F5 para ejecutar la solución.

Ee663219.Important(es-es,VS.100).gif Nota:
Puede que los ejemplos ya estén instalados en su equipo. Compruebe el siguiente directorio (valor predeterminado) antes de continuar.

<unidadDeInstalación>:\WF_WCF_Samples

Si no existe este directorio, vaya a la página de ejemplos de Windows Communication Foundation (WCF) y Windows Workflow Foundation (WF) Samples para .NET Framework 4 para descargar todos los ejemplos de WF y Windows Communication Foundation (WCF). Este ejemplo se encuentra en el siguiente directorio.

<unidadDeInstalación>:\WF_WCF_Samples\WF\Basic\CustomActivities\Code-Bodied\DynamicArguments