public InProcessChangeEventNotificationSubscription(ILogger logger,
                                                     IChangeEventMigrator migrator,
                                                     IEnumerable <IDomainEventPublisherSubscriberPair> pubSubPairs,
                                                     params IEventNotifyingStorage[] eventingStorages) : base(logger, eventingStorages)
 {
     logger.GuardAgainstNull(nameof(logger));
     migrator.GuardAgainstNull(nameof(migrator));
     pubSubPairs.GuardAgainstNull(nameof(pubSubPairs));
     this.notificationProducer = new DomainEventNotificationProducer(logger, migrator, pubSubPairs.ToArray());
 }
예제 #2
0
        public DomainEventNotificationProducer(ILogger logger, IChangeEventMigrator migrator,
                                               params IDomainEventPublisherSubscriberPair[] pubSubPairs)
        {
            logger.GuardAgainstNull(nameof(logger));
            pubSubPairs.GuardAgainstNull(nameof(pubSubPairs));
            migrator.GuardAgainstNull(nameof(migrator));

            this.logger      = logger;
            this.pubSubPairs = pubSubPairs;
            this.migrator    = migrator;
        }
 public GeneralEventStreamStorage(IRecorder recorder, IDomainFactory domainFactory,
                                  IChangeEventMigrator migrator, IRepository repository)
 {
     recorder.GuardAgainstNull(nameof(recorder));
     repository.GuardAgainstNull(nameof(repository));
     domainFactory.GuardAgainstNull(nameof(domainFactory));
     migrator.GuardAgainstNull(nameof(migrator));
     this.recorder      = recorder;
     this.repository    = repository;
     this.domainFactory = domainFactory;
     this.migrator      = migrator;
     this.containerName = typeof(TAggregateRoot).GetEntityNameSafe();
 }
예제 #4
0
        public ReadModelProjector(IRecorder recorder, IReadModelCheckpointStore checkpointStore,
                                  IChangeEventMigrator migrator,
                                  params IReadModelProjection[] projections)
        {
            recorder.GuardAgainstNull(nameof(recorder));
            checkpointStore.GuardAgainstNull(nameof(checkpointStore));
            projections.GuardAgainstNull(nameof(projections));
            migrator.GuardAgainstNull(nameof(migrator));

            this.recorder        = recorder;
            this.checkpointStore = checkpointStore;
            this.projections     = projections;
            this.migrator        = migrator;
        }
예제 #5
0
        public InProcessReadModelProjectionSubscription(ILogger logger, IIdentifierFactory idFactory,
                                                        IChangeEventMigrator migrator, IDomainFactory domainFactory, IRepository repository,
                                                        IEnumerable <IReadModelProjection> projections,
                                                        params IEventNotifyingStorage[] eventingStorages) : base(logger, eventingStorages)
        {
            logger.GuardAgainstNull(nameof(logger));
            idFactory.GuardAgainstNull(nameof(idFactory));
            migrator.GuardAgainstNull(nameof(migrator));
            domainFactory.GuardAgainstNull(nameof(domainFactory));
            repository.GuardAgainstNull(nameof(repository));
            projections.GuardAgainstNull(nameof(projections));
            var checkpointReadModel = new ReadModelCheckpointStore(logger, idFactory, domainFactory, repository);

            this.projector = new ReadModelProjector(logger, checkpointReadModel, migrator, projections?.ToArray());
        }
예제 #6
0
        public static IChangeEvent CreateEventFromJson(this EventMetadata metadata, string eventId, string eventJson,
                                                       IChangeEventMigrator migrator)
        {
            metadata.GuardAgainstNull(nameof(metadata));
            eventId.GuardAgainstNullOrEmpty(nameof(eventId));
            eventJson.GuardAgainstNullOrEmpty(nameof(eventJson));

            var typeName  = metadata.Fqn;
            var eventData = eventJson;

            try
            {
                return(migrator.Rehydrate(eventId, eventData, typeName));
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException($"Failed to deserialize event '{eventId}' as type: '{typeName}'",
                                                    ex);
            }
        }
예제 #7
0
        void IPersistableAggregateRoot.LoadChanges(IEnumerable <EntityEvent> history, IChangeEventMigrator migrator)
        {
            foreach (var item in history)
            {
                var @event = item.ToEvent(migrator);
                OnStateChanged(@event);

                var expectedVersion = ChangeVersion + 1;
                if (item.Version != expectedVersion)
                {
                    throw new InvalidOperationException(
                              $"The version of this loaded change ('{item.Version}') was not expected. Expected version '{expectedVersion}'. Perhaps a missing change or this change was replayed out of order?");
                }
                ChangeVersion = expectedVersion;
            }
        }
예제 #8
0
 public void LoadChanges(IEnumerable <EntityEvent> history, IChangeEventMigrator migrator)
 {
     LoadedChanges = history;
 }
예제 #9
0
 private static IChangeEvent DeserializeEvent(EventStreamStateChangeEvent changeEvent,
                                              IChangeEventMigrator migrator)
 {
     return(changeEvent.Metadata.CreateEventFromJson(changeEvent.Id, changeEvent.Data, migrator));
 }
예제 #10
0
 public IChangeEvent ToEvent(IChangeEventMigrator migrator)
 {
     return(Metadata.CreateEventFromJson(Id, Data, migrator));
 }