示例#1
0
 /// <summary>
 /// Create a new instance of the HubSpotListOfContactsClient with default dependencies
 /// </summary>
 /// <remarks>
 /// This constructor creates a HubSpotListOfContactsClient using "real" dependencies that will send requests
 /// via the network - if you wish to have support for functional tests and mocking use the "eager" constructor
 /// that takes in all underlying dependecies
 /// </remarks>
 /// <param name="apiKey">Your API key</param>
 public HubSpotListOfContactsClient(string apiKey)
     : base(
         new RealRapidHttpClient(new HttpClient()),
         NoopLoggerFactory.Get(),
         new RequestSerializer(new RequestDataConverter(NoopLoggerFactory.Get <RequestDataConverter>())),
         "https://api.hubapi.com",
         apiKey)
 {
 }
示例#2
0
        public static ISession Create(
            ITransaction transaction,
            IEventStore eventStore,
            ISnapshotStore snapshotStore,
            ILoggerFactory loggerFactory                      = null,
            IEventPublisher eventPublisher                    = null,
            IEventRouter eventRouter                          = null,
            IEventUpdateManager eventUpdateManager            = null,
            IEnumerable <IMetadataProvider> metadataProviders = null,
            ISnapshotStrategy snapshotStrategy                = null,
            IEventsMetadataService eventsMetadataService      = null)
        {
            // TODO: refactor ctor's Session sucks :(

            if (eventStore == null)
            {
                throw new ArgumentNullException(nameof(eventStore));
            }
            if (snapshotStore == null)
            {
                throw new ArgumentNullException(nameof(snapshotStore));
            }

            if (loggerFactory == null)
            {
                loggerFactory = new NoopLoggerFactory();
            }

            if (eventRouter == null)
            {
                eventRouter = StubEventRouter.Ok();
            }

            if (eventPublisher == null)
            {
                eventPublisher = new EventPublisher(eventRouter);
            }

            var session = new Session(
                loggerFactory: loggerFactory,
                transaction: transaction,
                eventStore: eventStore,
                snapshotStore: snapshotStore,
                eventPublisher: eventPublisher,
                eventUpdateManager: eventUpdateManager,
                metadataProviders: metadataProviders,
                snapshotStrategy: snapshotStrategy,
                eventsMetadataService: eventsMetadataService);

            return(session);
        }
示例#3
0
        public static DenormalizerConfiguration SetMongoDbEventSubscriber(this DenormalizerConfiguration config,
                                                                          IMongoDatabase db, ILoggerFactory loggerFactory = null)
        {
            Precondition.For(() => config).NotNull();
            Precondition.For(() => db).NotNull();

            if (loggerFactory == null)
            {
                loggerFactory = new NoopLoggerFactory();
            }

            config.Subscriber = new MongoEventSubscriber(db, loggerFactory);
            return(config);
        }
        private async Task <Session> ArrangeSessionAsync <TAggregate>(Guid aggregateId, IEventUpdateManager eventUpdateManager = null, params IDomainEvent[] arrangeEvents)
            where TAggregate : Aggregate, new()
        {
            var metadataProviders = new IMetadataProvider[]
            {
                new AggregateTypeMetadataProvider(),
                new EventTypeMetadataProvider(),
                new CorrelationIdMetadataProvider()
            };

            var loggerFactory  = new NoopLoggerFactory();
            var eventPublisher = new EventPublisher(new StubEventRouter());

            var stores = new InMemoryStores();

            var session = new Session(loggerFactory, stores, stores.EventStore, stores.SnapshotStore, eventPublisher, eventUpdateManager: eventUpdateManager);

            var aggregate = (TAggregate)Activator.CreateInstance(typeof(TAggregate), args: aggregateId);

            var serializedEvents = arrangeEvents.Select((e, index) =>
            {
                index++;

                var eventVersion = aggregate.Version + index;

                var metadata = metadataProviders.SelectMany(md => md.Provide(aggregate, e, MetadataCollection.Empty)).Concat(new[]
                {
                    new KeyValuePair <string, object>(MetadataKeys.EventId, Guid.NewGuid()),
                    new KeyValuePair <string, object>(MetadataKeys.EventVersion, eventVersion)
                });

                return(new UncommittedEvent(aggregate, e, eventVersion)
                {
                    Metadata = new MetadataCollection(metadata)
                });
            });

            stores.BeginTransaction();

            await stores.EventStore.AppendAsync(serializedEvents);

            await stores.CommitAsync();

            return(session);
        }
示例#5
0
        private async Task <Session> ArrangeSessionAsync <TAggregate>(Guid aggregateId, IEventUpdateManager eventUpdateManager = null, params IDomainEvent[] arrangeEvents)
            where TAggregate : Aggregate, new()
        {
            var metadataProviders = new IMetadataProvider[]
            {
                new AggregateTypeMetadataProvider(),
                new EventTypeMetadataProvider(),
                new CorrelationIdMetadataProvider()
            };

            var loggerFactory  = new NoopLoggerFactory();
            var eventPublisher = new EventPublisher(new StubEventRouter());

            var eventStore           = new InMemoryEventStore();
            var eventSerializer      = new EventSerializer(new JsonTextSerializer());
            var snapshotSerializer   = new SnapshotSerializer(new JsonTextSerializer());
            var projectionSerializer = new ProjectionSerializer(new JsonTextSerializer());

            var session = new Session(loggerFactory, eventStore, eventPublisher, eventSerializer, snapshotSerializer, projectionSerializer, eventUpdateManager: eventUpdateManager);

            var aggregate = (TAggregate)Activator.CreateInstance(typeof(TAggregate), args: aggregateId);

            aggregate.UpdateVersion(arrangeEvents.Length - 1);

            var serializedEvents = arrangeEvents.Select((e, index) =>
            {
                index++;

                var metadatas =
                    metadataProviders.SelectMany(md => md.Provide(aggregate, e, EventSource.Metadata.Empty)).Concat(new[]
                {
                    new KeyValuePair <string, object>(MetadataKeys.EventId, Guid.NewGuid()),
                    new KeyValuePair <string, object>(MetadataKeys.EventVersion, (aggregate.Version + index))
                });
                return(eventSerializer.Serialize(aggregate, e, new EventSource.Metadata(metadatas)));
            });

            eventStore.BeginTransaction();

            await eventStore.SaveAsync(serializedEvents);

            await eventStore.CommitAsync();

            return(session);
        }