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

时间:2013-12-23 13:07:41

标签: c# .net constraints masstransit type-constraints

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

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

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

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

为什么要求邮件类为class?是否可以更改它,以便库与现有代码更加无缝地连接?我认为虽然没有添加约束,所以可能存在一些复杂性。

1 个答案:

答案 0 :(得分:1)

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

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

相关问题