Я столкнулся с проблемой базовой типизации сообщений, которые я пытаюсь опубликовать через 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
.