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)));
     }
 }
Пример #3
0
        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);
        }