Si è verificato un problema di battitura di base con i messaggi che sto tentando di pubblicare tramite MassTransit. Si consideri il seguente:Errore di digitazione dei messaggi di 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;
}
Tuttavia, quando tento di pubblicare una raccolta di eventi astratti con qualcosa di simile:
public void PublishEvents(IEnumerable<Event> events) {
foreach (var e in events) {
Bus.Instance.Publish(e);
}
}
non ricevo tutti gli eventi di questa collezione, a prescindere dalle loro tipi concreti . Se lancio l'evento sul proprio tipo concreto prima della pubblicazione sul bus, ricevo correttamente il messaggio.
Qualche idea su come posso correggere questo per consentire alla mia raccolta astratta di eventi di essere elaborata senza eseguire il casting di ciascuno di essi?
EDIT: Ho tentato di cambiare le mie impostazioni per utilizzare BinarySerialization in questo modo:
Bus.Initialize(sbc =>
{
sbc.UseBinarySerializer();
});
e non hanno prodotto alcun cambiamento nel comportamento. L'unico modo in cui sono riuscito a chiamare la classe Consumes<PersonCreated>
consiste nel trasmettere esplicitamente un evento al tipo PersonCreated
.
Ahh .. Ho esaminato l'elenco di discussione per questo problema oggi, e ho pensato che fosse un posto fantastico per postare, come più lo vedrei qui. Effettuerò il cross-post –
Noi, gli sviluppatori MT, vedremo l'e-mail prima che vedremo post SO. Cerchiamo di essere abbastanza reattivi alle domande. – Travis
Ho aggiornato la mia domanda per includere informazioni sul mio tentativo di utilizzare il BinarySerializer –