Ошибка при вводе сообщения MassTransit

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

8
задан Jeff Fritz 30 August 2011 в 03:15
поделиться