2011-11-23 2 views
0

Dans un WorkflowDesigner de rehost, je veux attribuer un valiable à InArguments par le code suivant:Comment créer une nouvelle InArgument <T> où T peut être modifié de manière dynamique

Type inActivityType = leftActivity.GetType(); 
PropertyInfo inPropInfo = inActivityType.GetProperty(inArgumentName); 
InPropInfo.SetValue(leftActivity, 
        new InArgument<someType>(new VisualBasicValue<someType>(variableName)), 
        null); 

Depuis le « UnType » est attribué à différents tapez dynamiquement, la façon régulière de créer un nouvel InArgument ne fonctionnera pas. Une idée que j'ai trouvé est:

// Type theType - the value of theType will be assigned dynamicly, 
// base on different InArgument be selected 

Type InArgType = typeof(InArgument<>).MakeGenericType(new[] { theType }); 
object InArg = Activator.CreateInstance(InArgType); 
. . . 
    InPropInfo.SetValue(leftActivity, 
        InArg, 
        null); 

Mais le problème est, je ne peux créer une nouvelle InArgument, mais ne peut pas attribuer de nouveaux VisualBasicValue (variableName) à elle.

Merci pour votre idée.

Répondre

1

Vous pouvez également utiliser la même astuce pour créer une nouvelle instance de VisualBasicValue et la transmettre à InArgument en utilisant le overload of CreateInstance qui prend les arguments constructeur. Peut-être quelque chose comme ceci:

Type InArgType = typeof(InArgument<>).MakeGenericType(new[] { theType }); 
Type vbValueType = typeof (VisualBasicValue<>).MakeGenericType(new[] {theType}); 
object vbValue = Activator.CreateInstance(vbValueType, variableName); 
object InArg = Activator.CreateInstance(InArgType, vbValue); 

Cependant, en fonction de ce que vous Tring à faire, vous pouvez simplement utiliser le InArgument non générique au lieu sans se soucier de médicaments génériques là-bas.

+0

Merci beaucoup. Sur la dernière ligne de code, nous devons aussi passer vbValue, non? – Yadong

+0

+1 pour abandonner les génériques. Vous soufflez tous les avantages des génériques en faisant cela. – Will

+0

@Yadong correct. – vcsjones

Questions connexes