为什么MassTransit消息中不允许使用结构?

MassTransit的使用者接口都希望消息模型是类而不是结构。 因为它们都是内部接口(我必须说非常好的设计),这是显示约束的通用容器类,直接取自源代码 :

 ///  /// Declares a Consume method for the message type TMessage which is called /// whenever aa message is received of the specified type. ///  public static class Consumes where TMessage : class 

对于刚开始使用该技术的人来说,这不是一个问题,但这对我们来说很麻烦,因为在我们的代码库中已经有了与命令模式相关的对象,甚至在考虑使用服务总线框架之前,所以我们不得不改变了很多接口和generics类来为它们添加这个约束来与MT一起工作。

我们很幸运没有明确地拥有任何struct类型,因为这可能会导致更多(可能是不需要的)更改。

为什么它要求消息类成为一个class ? 是否可以更改它,以便库与现有代码更加无缝地连接? 我认为虽然没有添加约束,所以可能存在一些并发症。

实际上,您的所有消息合同都应该是接口。 抽象应该从任何逻辑中删除,接口将强制执行。 您还可以以有趣的方式组合传递,因为MT将传递到inheritance/实现层次结构中的所有匹配路由。

但无论我们建议用于消息的是什么,事实certificate值类型不会像我们使用它们那样工作。 我们在很大程度上依赖于类型信息,我们可以为您的消费者创建类型的代理。