【问题标题】:Why are structs not allowed in MassTransit messaging?为什么 MassTransit 消息传递中不允许使用结构?
【发布时间】:2014-01-11 17:08:03
【问题描述】:

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?是否有可能改变这一点,以便库与现有代码更无缝地接口?我认为该约束并不是白白添加的,因此可能存在一些复杂情况。

【问题讨论】:

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


    【解决方案1】:

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

    但无论我们建议对消息做什么,事实证明值类型不会像我们使用它们的方式那样工作。我们严重依赖类型信息,我们可以为交付给您的消费者的类型创建代理。

    【讨论】:

      猜你喜欢
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      • 1970-01-01
      • 2013-08-22
      • 2012-01-16
      • 2017-11-18
      • 1970-01-01
      相关资源
      最近更新 更多