Nservicebus 我可以用名字来称呼一个动态传奇吗?

Nservicebus 我可以用名字来称呼一个动态传奇吗?,nservicebus,nservicebus-sagas,Nservicebus,Nservicebus Sagas,我有一个按名称唯一标识的产品列表。每种产品都有自己的订购流程。我希望每个产品订购流程都由一个传奇故事来定义。有没有一种方法可以让我用不同的传说来处理每一种产品?我可以为此使用端点吗?总线发送(产品名称、消息)是否有效 我希望这是有意义的。简短的回答是不,你不能直呼传奇的名字。但是,您可以使用标准消息轻松地做到这一点。您只需创建一个新的更具体的消息,该消息继承自产品消息基类。然后,让特定于产品的传奇故事以该消息类型开始。您可以执行一些定制的传奇故事查找逻辑(如上所述)来控制这一点。有关更完整的示例

我有一个按名称唯一标识的产品列表。每种产品都有自己的订购流程。我希望每个产品订购流程都由一个传奇故事来定义。有没有一种方法可以让我用不同的传说来处理每一种产品?我可以为此使用端点吗?总线发送(产品名称、消息)是否有效


我希望这是有意义的。

简短的回答是不,你不能直呼传奇的名字。但是,您可以使用标准消息轻松地做到这一点。您只需创建一个新的更具体的消息,该消息继承自产品消息基类。然后,让特定于产品的传奇故事以该消息类型开始。

您可以执行一些定制的传奇故事查找逻辑(如上所述)来控制这一点。有关更完整的示例,请查看其中显示了如何基于标题执行此操作。

明白了,但遗憾的是,我的产品没有具体的类。我有一个具有动态属性的基类,基类中有一个字符串作为产品名称。我的想法是,最终用户将定义他们的产品,然后我可以在动态链接库中插入传奇故事,然后一切都会正常工作。还有其他想法吗?您创建的每个特定saga都需要定义一个特定的消息具体类或接口,因为saga不是“调用”的,它们只处理管道中的消息类型。通过设计,消息发送者不知道谁将处理消息。在您的例子中,您可以根据产品名称执行一些switch语句,然后以这种方式发送特定于产品的消息,这在我看来很难看。或者,您可以将消息类名存储在产品数据库中,并通过反射进行实例化,例如:System.reflection.Assembly.GetExecutionGassembly().CreateInstance(“messageClassName”),我刚才想到的另一个选项是,每个产品类型都有一个端点。然后执行bus.Send(productName+“Endpoint”,productMessage);因为您可以按名称路由邮件。如果你有100种产品类型,那么这是不可行的。不过,如果你有5-10个,那么也许值得一看。酷——这是我的想法,但需要确保。为什么您认为100种产品类型/端点不好?