2015-03-27 1 views
0

J'ai une liste de produits identifiés par leur nom. chaque produit a son propre processus de commande. J'aimerais que chaque processus de commande de produits soit défini par une saga. Y at-il un moyen pour moi de traiter chaque produit en utilisant une saga différente? Puis-je utiliser des points de terminaison pour cela? Bus.Send (nom du produit, message) fonctionnerait-il?Puis-je appeler une saga dynamique par son nom?

J'espère que cela a du sens.

Répondre

1

La réponse courte est non, vous ne pouvez pas appeler une saga par son nom. Cependant, vous pouvez facilement le faire avec la messagerie standard. Vous créez simplement un nouveau message plus spécifique qui hérite de votre classe de base de message de produit. Faites ensuite démarrer votre saga spécifique au produit par ce type de message.

+0

gotcha mais malheureusement je n'ai pas de cours concret pour mes produits. J'ai une classe de produit de base avec des propriétés dynamiques et j'ai une chaîne dans la classe de base pour le nom du produit. mon idée était, l'utilisateur final définirait leur produit alors je pourrais tomber dans la DLL pour la saga et presto tout fonctionnerait juste. d'autres idées? – CurlyFro

+0

Chaque saga spécifique que vous créez va nécessiter la définition d'une classe concrète de message ou d'une interface spécifique, puisque les sagas ne sont pas "appelées", elles gèrent simplement les types de messages dans un pipeline. De par sa conception, l'expéditeur du message ne sait pas qui va gérer le message. Dans votre cas, vous pouvez soit faire des déclarations switch en fonction du nom du produit et envoyer le message spécifique au produit de cette façon, ce qui est moche à mon avis. Ou vous pouvez peut-être stocker le nom de classe de message dans votre base de données de produit et instancier par réflexion comme: –

+0

System.Reflection.Assembly.GetExecutingAssembly(). CreateInstance ("messageClassName") –

1

Vous pouvez faire une logique de recherche de saga personnalisée (comme décrit here) pour contrôler cela. Pour un exemple plus complet, consultez this blog post qui montre comment faire cela en fonction des en-têtes.