public void Should_throw_exception_when_target_is_not_aggregate()
        {
            var scanner = new ProjectionProviderAttributeScanner();

            Func <Task> func = async() => await scanner.ScanAsync(typeof(FakeNonAggregate)).ConfigureAwait(false);

            func.ShouldThrowExactly <TargetException>();
        }
        public async Task Should_scan_all_attributes_for_aggregate()
        {
            var bar = Bar.Create(Guid.NewGuid());

            var scanner = new ProjectionProviderAttributeScanner();

            var result = await scanner.ScanAsync(bar.GetType()).ConfigureAwait(false);

            result.Providers.Count().Should().Be(3);
        }
        public async Task Should_provide_a_projection_instance_from_aggregate()
        {
            var bar = Bar.Create(Guid.NewGuid());

            var scanner = new ProjectionProviderAttributeScanner();

            var result = await scanner.ScanAsync(bar.GetType()).ConfigureAwait(false);

            var provider = result.Providers.First(e => e.GetType().Name == nameof(BarProjectionProvider));

            var projection = (BarProjection)provider.CreateProjection(bar);

            projection.Id.Should().Be(bar.Id);
            projection.LastText.Should().Be(bar.LastText);
            projection.Messages.Count.Should().Be(bar.Messages.Count);
            projection.UpdatedAt.Should().Be(bar.UpdatedAt);
        }
Exemplo n.º 4
0
        public Session(
            ILoggerFactory loggerFactory,
            IEventStore eventStore,
            IEventPublisher eventPublisher,
            IEventSerializer eventSerializer,
            ISnapshotSerializer snapshotSerializer,
            IProjectionSerializer projectionSerializer,
            IProjectionProviderScanner projectionProviderScanner = null,
            IEventUpdateManager eventUpdateManager            = null,
            IEnumerable <IMetadataProvider> metadataProviders = null,
            ISnapshotStrategy snapshotStrategy           = null,
            IEventsMetadataService eventsMetadataService = null)
        {
            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }
            if (eventStore == null)
            {
                throw new ArgumentNullException(nameof(eventStore));
            }
            if (eventPublisher == null)
            {
                throw new ArgumentNullException(nameof(eventPublisher));
            }
            if (eventSerializer == null)
            {
                throw new ArgumentNullException(nameof(eventSerializer));
            }
            if (snapshotSerializer == null)
            {
                throw new ArgumentNullException(nameof(snapshotSerializer));
            }
            if (projectionSerializer == null)
            {
                throw new ArgumentNullException(nameof(projectionSerializer));
            }

            if (metadataProviders == null)
            {
                metadataProviders = Enumerable.Empty <IMetadataProvider>();
            }

            metadataProviders = metadataProviders.Concat(new IMetadataProvider[]
            {
                new AggregateTypeMetadataProvider(),
                new EventTypeMetadataProvider(),
                new CorrelationIdMetadataProvider()
            });

            if (projectionProviderScanner == null)
            {
                projectionProviderScanner = new ProjectionProviderAttributeScanner();
            }

            if (snapshotStrategy == null)
            {
                snapshotStrategy = new IntervalSnapshotStrategy();
            }

            if (eventsMetadataService == null)
            {
                eventsMetadataService = new EventsMetadataService();
            }

            _logger = loggerFactory.Create(nameof(Session));

            _snapshotStrategy          = snapshotStrategy;
            _eventStore                = eventStore;
            _eventSerializer           = eventSerializer;
            _snapshotSerializer        = snapshotSerializer;
            _projectionSerializer      = projectionSerializer;
            _eventUpdateManager        = eventUpdateManager;
            _projectionProviderScanner = projectionProviderScanner;
            _metadataProviders         = metadataProviders;
            _eventPublisher            = eventPublisher;
            _eventsMetadataService     = eventsMetadataService;
        }