C# MassTransit消息键入错误

C# MassTransit消息键入错误,c#,event-handling,masstransit,C#,Event Handling,Masstransit,我试图通过MassTransit发布的邮件遇到了基本键入问题。考虑以下事项: [Serializable] public abstract class Event : CorrelatedBy<Guid> { public Guid CorrelationId { get; set; } public abstract string EventName { get; } public override string ToString() {

我试图通过MassTransit发布的邮件遇到了基本键入问题。考虑以下事项:

[Serializable]
public abstract class Event : CorrelatedBy<Guid> {

    public Guid CorrelationId { get; set; }

    public abstract string EventName { get; }

    public override string ToString() {
        return string.Format("{0} - {1}", EventName, CorrelationId);
    }

}

[Serializable]
public class PersonCreated : Event {

    public PersonCreated(Guid personId, string firstName, string lastName) {

       PersonId = personId;
       FirstName = firstName;
       LastName = lastName;

    }

    public readonly Guid PersonId;
    public readonly string FirstName;
    public readonly string LastName;

}

行为上没有任何变化。我能够调用我的
Consumes
类的唯一方法是显式地将事件强制转换为
PersonCreated
类型。

编辑:序列化器在这里并不重要。我没想清楚

您可以使用正确的类型信息调用
Bus.Instance.Publish
,方法是对
事件
对象进行反射,并获取它的实际类型。这将是一些笨拙的代码,但一旦完成,可能很容易重用。在Magnum中,我们有一个扩展方法来帮助实现这一点

Bus.Instance.FastInvoke(new[]{ event.GetType() }, "Publish", event);

加入我们的邮件列表,我们将很高兴讨论更多细节

啊。。今天我浏览了这个问题的讨论列表,认为这是一个发布的好地方,因为更多人会在这里看到。我将穿越postWe,MT开发人员,在我们看到SO post之前将看到电子邮件。我们试图对问题做出很好的回应。我已更新了我的问题,以包含有关我尝试使用BinarySerializer的信息。需要更改序列化程序以获取另一端的类型信息。发布过程只检查它在编译时从
Publish
T
中获取的类型信息(如果使用反射,则运行)。是的,我们无法合并Magnum,因为用于sagas的状态机已公开。有了NuGet,添加依赖项就容易多了!
 Bus.Initialize(sbc =>
     {
         sbc.UseBinarySerializer();
     });
Bus.Instance.FastInvoke(new[]{ event.GetType() }, "Publish", event);