2010-08-05 4 views
4

J'ai une activité Workflow 4 qui peut être exécutée sur n'importe quel nombre de classes qui héritent de ma classe de base. Donc, l'activité est, naturellement, générique. Similaire aux activités ForEach ou AddToCollection, mon activité nécessite un paramètre de type.Une activité générique WF4 peut-elle être déclarée en XAML?

Ma question est: puis-je créer cette activité dans le concepteur avec XAML? Gardez à l'esprit que c'est une activité composite, donc le concepteur semble être le meilleur choix.

Si je devais créer dans le code, il ressemblerait à ceci:

public class MyGenericActivity<T> : Activity where T : MyBaseClass 
{ 
    //args would go here 
    public MyGenericActivity() 
    { 
     this.Implementation =() => new Sequence 
     { 
     Activities = { //... } 
     }; 
    } 
} 

Bien que cette solution fonctionnerait, l'entretien serait certainement douloureux et vous ne recevez pas une des « subtilités » du concepteur, de cette façon.

+0

Eh bien, malheureusement, je n'ai pas trouvé un bon moyen de le faire. J'ai donc dû refactoriser certaines activités (y compris cette activité composite) afin qu'elles prennent un InArgument et que les instances des classes soient transmises en tant que System.Object. Cela laisse un très mauvais goût dans ma bouche, mais c'est la seule façon que je pourrais trouver qui nous empêcherait d'avoir 20 à 30 workflows xaml qui font exactement la même chose. Merci pour votre contribution. –

Répondre

1

La pile XAML pourrait éventuellement le supporter (pas sûr), mais dans VS 10 le concepteur de workflow ne vous laisse certainement pas faire cela.

0

Je ne sais pas si vous le pouvez mais je ne pense pas. Mais même si tu pouvais pourquoi le ferais-tu? Une activité xaml est uniquement un balisage et une composition, il n'y a pas de code, alors comment utiliseriez-vous le type générique.

L'expérience du temps de conception pour une personne utilisant votre activité n'est pas liée à la façon dont vous créez votre activité. Ajoutez simplement un concepteur et offrez à l'utilisateur l'expérience de conception que vous aimez. Vous pouvez les laisser ajouter plusieurs activités enfants à l'aide de WorkflowItemsPresenter.

+0

Je ne trouve aucune preuve que je peux le faire non plus. En ce qui concerne votre question, "... comment utiliseriez-vous le type générique" Je passerais ce type dans les autres activités qui s'y trouvent. Vous voyez, nous avons déjà écrit beaucoup d'activités (principalement CodeActivity) qui prennent un paramètre de type. Ce serait bien si je n'avais pas à spécifier le type dans mon xaml, mais je pourrais réutiliser le même xaml pour tous mes types. De cette façon, mon hôte de flux de travail pourrait décider quel type utiliser et je n'aurais pas à re-concevoir le même xaml pour chaque type. En outre, le problème en question n'est pas l'expérience de conception. C'est la réutilisation de code. –

+0

Ca a du sens mais j'ai peur de ne pas le savoir. – Maurice

Questions connexes