C# MassTransit消息键入错误
我试图通过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() {
[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);