Example #1
0
        private Pipeline Load(string pipelineId, out IUnitOfWork unitOfWork)
        {
            var data = _pipelineRepository.TryGetById(pipelineId);

            if (data == null)
            {
                unitOfWork = UnitOfWork.CreateForNonExistingPipeline();
                return(null);
            }
            var createdEvent = (PipelineCreatedEvent)data.Events.First();
            var instance     = _factory.Create(pipelineId, createdEvent.Schema);

            var eventApplicator = new DynamicEventSink(instance);

            foreach (var evnt in data.Events.Skip(1))
            {
                eventApplicator.On(evnt);
            }
            unitOfWork = UnitOfWork.CreateForExistingPipeline(data.Events, data.Version);
            return(instance);
        }
Example #2
0
        public T LoadSubject <T>()
            where T : PipelineSubject, new()
        {
            var subject = _loadedSubjects.OfType <T>().FirstOrDefault();

            if (subject != null)
            {
                return(subject);
            }

            subject = new T {
                Sink = this
            };
            var eventApplicator = new DynamicEventSink(subject);

            foreach (var evnt in _committedEvents.Concat(_uncommittedEvents))
            {
                eventApplicator.On(evnt);
            }
            _loadedSubjects.Add(subject);
            return(subject);
        }