Ejemplo n.º 1
0
        public ChapterTransition TransitionTo <T>(ISaga saga) where T : IChapter
        {
            var chapterTransition = new ChapterTransition();

            if (saga.CurrentChapter != null && saga.CurrentChapter.GetType().Equals(typeof(T)))
            {
                saga.CurrentChapter.OnTransitionedTo();
                chapterTransition.TransitionedTo = (T)saga.CurrentChapter;
                return(chapterTransition);
            }

            chapterTransition.ValidationResults = _chapterValidationService.Validate(saga.CurrentChapter);

            if (chapterTransition.Invalid)
            {
                return(chapterTransition);
            }

            ThrowIfTransitionNotAllowed(saga, typeof(T));
            var chapter = GetExistingChapterIfAnyFrom(saga, typeof(T));

            if (chapter == null)
            {
                chapter = _container.Get <T>();
                saga.AddChapter(chapter);
            }

            saga.SetCurrentChapter(chapter);
            chapter.OnTransitionedTo();
            _librarian.Catalogue(saga);

            chapterTransition.TransitionedTo = (T)chapter;
            return(chapterTransition);
        }
Ejemplo n.º 2
0
        public void Commit()
        {
            var trackedObjects = GetObjectsBeingTracked();

            foreach (var trackedObject in trackedObjects)
            {
                var events = trackedObject.UncommittedEvents;
                if (events.HasEvents)
                {
                    events.MarkEventsWithCommandDetails(Command);
                    events.ExpandExecutionContext(ExecutionContext);
                    ProcessEvents(events);
                    _saga.Commit(events);
                    _uncommittedEventStreamCoordinator.Commit(events);
                    trackedObject.Commit();
                    _sagaLibrarian.Catalogue(_saga);
                }
            }
        }