protected virtual void Save(ISaga saga, IEvent by, string bucketId = Bucket.Default) { if (string.IsNullOrWhiteSpace(saga.Id)) throw new ApplicationException("Saga.Id is not specified"); if (OnSavedHook != null) OnSavedHook(this, saga, by); var byTyped = by as DomainEvent; foreach (IEvent e in saga.GetUncommittedEvents()) { var evt = e as DomainEvent; if (evt != null) { evt.SagaId = new Guid(saga.Id); if (byTyped != null) { if (!evt.TenantId.HasValue) evt.TenantId = byTyped.TenantId; if (!evt.IssuedBy.HasValue) evt.IssuedBy = byTyped.IssuedBy; } } } foreach (DomainCommand cmd in saga.GetUndispatchedMessages()) { cmd.SagaId = new Guid(saga.Id); if (byTyped != null) { if (!cmd.TenantId.HasValue) cmd.TenantId = byTyped.TenantId; if (!cmd.IssuedBy.HasValue) cmd.IssuedBy = byTyped.IssuedBy; } } sagas.Save(bucketId, saga, Guid.NewGuid(), _ => { }); }
static void OnSagaSaved(EventHandlerBase sender, ISaga saga, IEvent by) { if (by != null && saga != null) { Console.WriteLine("[SAGA] {0} -> {1} -> {2}", by.GetType().FullName, saga.GetType().FullName, string.Join(", ", saga.GetUndispatchedMessages().OfType <object>().Select(e => e.GetType().FullName))); } }
protected virtual void Save(ISaga saga, IEvent by, string bucketId = Bucket.Default) { if (string.IsNullOrWhiteSpace(saga.Id)) { throw new ApplicationException("Saga.Id is not specified"); } if (OnSavedHook != null) { OnSavedHook(this, saga, by); } var byTyped = by as DomainEvent; foreach (IEvent e in saga.GetUncommittedEvents()) { var evt = e as DomainEvent; if (evt != null) { evt.SagaId = new Guid(saga.Id); if (byTyped != null) { if (!evt.TenantId.HasValue) { evt.TenantId = byTyped.TenantId; } if (!evt.IssuedBy.HasValue) { evt.IssuedBy = byTyped.IssuedBy; } } } } foreach (DomainCommand cmd in saga.GetUndispatchedMessages()) { cmd.SagaId = new Guid(saga.Id); if (byTyped != null) { if (!cmd.TenantId.HasValue) { cmd.TenantId = byTyped.TenantId; } if (!cmd.IssuedBy.HasValue) { cmd.IssuedBy = byTyped.IssuedBy; } } } sagas.Save(bucketId, saga, Guid.NewGuid(), _ => { }); }
private static Dictionary <string, object> PrepareHeaders(ISaga saga, Action <IDictionary <string, object> > updateHeaders) { var headers = new Dictionary <string, object>(); headers[SagaTypeHeader] = saga.GetType().FullName; if (updateHeaders != null) { updateHeaders(headers); } var i = 0; foreach (var command in saga.GetUndispatchedMessages()) { headers[UndispatchedMessageHeader + i++] = command; } return(headers); }