コード例 #1
0
        private EventProviderTransaction CreateEventProviderTransaction(EventProvider eventProvider, SqlDomainEvent[] eventProviderEvents, SqlRevision[] eventProviderRevisions)
        {
            // create array for transactions revisions
            var revisions = new EventStreamRevision[eventProviderRevisions.Count()];

            SqlRevision revision = null;

            // loop through each revision adding domain events
            for (var revisionIterator = 0; revisionIterator < eventProviderRevisions.Length; revisionIterator++)
            {
                // get current revision
                revision = eventProviderRevisions[revisionIterator];

                // add revision to revision collection
                revisions[revisionIterator] = new DomainEventRevision(revision.EventProviderRevisionId,
                                                                      revision.EventProviderVersion,
                                                                      GetRevisionDomainEvents(eventProviderEvents, revision));
            }

            // return new event provider transaction
            return(new EventProviderTransaction(revision.TransactionId, eventProvider, _serializer.Deserialize <ICommand>(revision.CommandTypeId, revision.CommandData), new EventProviderDescriptor(revision.Descriptor), revisions, _serializer.Deserialize <List <Meta> >(revision.Metadata)));
        }
コード例 #2
0
        public void Project(EventProvider eventProvider, params EventStreamRevision[] revisions)
        {
            Contract.Requires(eventProvider != null);
            Contract.Requires(revisions != null);
            Contract.Requires(revisions.Length > 0);

            EventStreamRevision revision = null;

            for (var i = 0; i < revisions.Length; i++)
            {
                revision = revisions[i];

                var domainEventRevision = revision as DomainEventRevision;

                if (domainEventRevision == null)
                {
                    throw new NotImplementedException();
                }
                else
                {
                    foreach (var domainEvent in domainEventRevision)
                    {
                        // get handler
                        var handler = GetHandler(ProjectionHandlerCatalog.GetEntry(domainEvent.GetType()));

                        // create context
                        var context = GetContext(eventProvider, domainEvent);

                        // handle
                        Handle(handler, context);
                    }
                }
            }

            _projectionPositions[eventProvider.Identity] = new ProjectionPosition(revision.Version);
        }
        public void Append(EventStreamRevision revision)
        {
            Contract.Requires(revision != null);

            throw new NotImplementedException();
        }