2010-05-26 6 views
3

J'ai un workflow dont l'activité racine est une NativeActivity personnalisée avec un InArgument public appelé XmlData. Quand j'essaie d'utiliser cet argument dans un enfant Si l'activité que je reçois l'erreur suivante à l'aide XmlData dans la condition:Condition Erreur: La propriété n'est pas déclarée. Il peut être inaccessible en raison de son niveau de protection

'XmlData' is not declared. It may be inaccessible due to its protection level 

Mes propriétés ressemblent à ceci:

public Activity Body {get;set;} 
public InArgument<CustomObj> XmlData {get;set;} 

et c'est la méthode CacheMetadata:

protected override void CacheMetadata(NativeActivityMetadata metadata) 
    { 
     var runtime = new RuntimeArgument("XmlData",typeof(CustomObj),ArgumentDirection.In,true); 
     metadata.Bind(this.XmlData,runtime); 
     metadata.AddArgument(runtime); 

     metadata.AddChild(Body); 
    } 

J'ajoute l'argument à l'intérieur CacheMetadata selon la méthode de metadata.AddArgument, et je l'ai essayé d'ajouter la propriété de l'enfant, il a à la fois à l'aide d'un addChild d AddImplementationChild.

Si je remplace mon activité personnalisée par un ActivityBuilder et que j'utilise du code pour créer une propriété DynamicActivityProperty, la condition peut être compilée avec succès, donc je ne vois pas ce qui me manque lorsque j'utilise mon propre code.

+0

Le partage d'un code serait utile. – Maurice

+0

Désolé de ne pas les ajouter pour commencer. Ils sont maintenant ajoutés. – Stoive

+0

Que se passe-t-il si vous commentez la fonction CacheMetadata? L'implémentation par défaut devrait être assez bonne. Le CustomObj est-il également un type public? L'erreur suggérée est interne. – Maurice

Répondre

0

Il y a 3 solutions possibles que je peux penser, l'un est daft, l'autre est hacky et l'autre vaguement sensible.

Solution 1 (le fichier Daft) Promouvoir le RuntimeArgument à un membre readonly privé et inverser les appels Bind et AddArgument, j'ai eu quelques occurrences aléatoires où cela a aidé.

Solution 2 (très hacky un) Vous pouvez toujours mettre les valeurs dans une propriété nommée sur le contexte et le tirer dans l'enfant

Solution 3 (une sensible) Si vous voulez passer InArgument à un enfant, liez-le à une variable et liez l'enfant à la variable.

Un de ces aide? John