【发布时间】:2011-08-29 22:58:20
【问题描述】:
我在尝试通过 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;
}
但是,当我尝试使用以下内容发布抽象事件集合时:
public void PublishEvents(IEnumerable<Event> events) {
foreach (var e in events) {
Bus.Instance.Publish(e);
}
}
我不会从这个集合中收到任何事件,无论它们的具体类型如何。如果我在总线上发布之前将事件转换为正确的具体类型,我确实会正确接收到消息。
关于如何更正此问题以允许处理我的抽象事件集合而不强制转换每个事件的任何想法?
编辑:我尝试更改设置以使用 BinarySerialization,如下所示:
Bus.Initialize(sbc =>
{
sbc.UseBinarySerializer();
});
并且没有产生任何行为变化。我能够调用 Consumes<PersonCreated> 类的唯一方法是将事件显式转换为 PersonCreated 类型。
【问题讨论】:
标签: c# event-handling masstransit