Que dois-je faire pour dire que invoquethod strong> peut appeler une méthode et lors de l'utilisation d'options spéciales telles que répéter forte> il doit exexturer après la répétition méthodérationExecuter strong> p>
5 Réponses :
Ce que vous avez fourni semble un peu comme la programmation d'un flux de travail ou d'une machine d'état. Afin de capturer des invocations et de respecter les conditions lors de l'exécution, vous devez modifier votre approche légèrement.
Au lieu d'invoquer des actions au fur et à mesure qu'ils entrent, envisagez de pousser vos actions dans une file d'attente, puis de fournir un mécanisme pour exécuter la machine d'état . P>
new MethodInvoker() .ForAllInvocationsUseCondition(true) .InvokeMethod( Process.A ).Repeat(100) .Run();
Probablement une file d'attente plutôt qu'une pile.
Oui, une file d'attente est probablement une meilleure approche. Mise à jour du message.
Je me suis décidé pour la solution Jays, car il est plus fluide ou plus naturel de parler que toutes les autres solutions. De toute façon merci pour votre suggestion :)
Utilisez une méthode finale ("Go" ou "Exécuter") pour donner des coups de pied.
Vous pouvez avoir un setingvokemethod code> et un
exécuter la méthode code>.
SetInvokeMethod(Action).Repeat(100).Execute()
Dans une phrase, votre code est trop "désireux". La méthode Invokemethod est appelée et exécute l'action, avant que votre structure de grammaire fluente ne indique à votre code combien de fois il devrait répéter.
Pour changer cela, essayez également de spécifier la méthode que vous appelez en tant que champ privé dans votre méthodyvoker, puis Inclure une commande qui est un "déclencheur" pour effectuer réellement les commandes. La clé est "évaluation paresseuse"; Dans une interface fluide, rien ne devrait être fait jusqu'à ce qu'il soit à; De cette façon, vous avez la plus grande partie du contrôle quand cela se produise. p>
Il y a beaucoup de façons de cuire ce chat, mais je pense qu'une source de cette difficulté est dans le fait que vous invoquez réellement la méthode dans la méthode Typiquement, nous utilisons des API fluides pour transformer la syntaxe qui est évaluée de l'intérieur dans quelque chose qui peut être exprimé d'une manière gauche à droite. Ainsi, les composants de générateur d'expression de l'interface sont utilisés pour accumuler des états dans l'expression, et seulement à la fin, le «vrai travail» se produit. P> Une solution à votre problème immédiat est de faire la queue de chaque problème. Action avec ses options associées (conditions d'invocation, comptage répété, etc.) et ajoutez une méthode Une autre solution serait de mettre toutes les options d'exécution à l'intérieur de la méthode Cette méthode ressemblerait à quelque chose comme: p> Je n'ai pas travaillé à travers cela dans Visual Studio , mais les autres articles seraient quelque chose comme: p> Notez que invokemethod () code> (Go Figure!) .
exécuteall () code> sur code> méthodexecuter exécute les actions entièrement configurées à la fin de la chaîne de membre. p>
invokemethod () code>; quelque chose comme: p>
répétercount code> et
action code> ne sont pas exposés à l'interface . De cette façon, vous ne verrez pas ces membres lors de l'appelant
.invoke (x => x. Code>, mais vous aurez accès à celui-ci lors de l'utilisation du concret
exécutantbuilder code> de la classe
Invoquer () code> méthode. P> p>
Pourquoi ne pas avoir "répéter" comme argument de invoquethod comme invokemethod (action action, int répéter = 1)
J'ai réfléchi à cela aussi, mais je n'aime pas cela, car vous ne pouvez pas voir quel est le numéro pour sans lire le nom du paramètre.
Vous pouvez utiliser un paramètre nommé pour être plus explicite lorsque vous l'appelez.
@Rookean alors faites ce invoquethod (A.Process, répétition: 100)