Пример #1
0
        internal static void HandleAndCommitAndPost(
            SubscriberMessage message,
            PublishersBySubscription publishersBySubscription,
            NotificationsByCorrelationsFunction <TUowProvider> notificationsByCorrelationsFunction,
            PublisherVersionByCorrelationsFunction <TUowProvider> publisherVersionByCorrelationsFunction,
            SaveNotificationsByPublisherAndVersionAction <TUowProvider> saveNotificationsByPublisherAndVersionAction,
            CommitWork <TUowProvider> commitWork,
            Action <IEnumerable <IDomainEvent> > publish)
        {
            var list = new List <IDomainEvent>();

            commitWork(provider =>
            {
                Handle(
                    message,
                    publishersBySubscription,
                    notificationsByCorrelationsFunction(provider),
                    publisherVersionByCorrelationsFunction(provider),
                    () => DateTimeOffset.Now,
                    saveNotificationsByPublisherAndVersionAction(provider),
                    messages => list.AddRange(messages));
            });

            publish(list);
        }
Пример #2
0
        public PublisherCorrelationMap(
            List <KeyValuePair <TypeContract, CorrelationMap> > maps,
            List <KeyValuePair <TypeContract, Func <TSubscriberDataContract, JsonContent, TSubscriberDataContract> > > mappers,
            PublishersBySubscription publisherByNotificationAndPublisherContract)
        {
            _publisherDataContractMaps = maps
                                         ?? new List <KeyValuePair <TypeContract, CorrelationMap> >();

            _publisherDataMappers = mappers
                                    ?? new List <KeyValuePair <TypeContract, Func <TSubscriberDataContract, JsonContent, TSubscriberDataContract> > >();

            PublisherBySubscription = publisherByNotificationAndPublisherContract ?? new PublishersBySubscription();
        }
Пример #3
0
        public static EventStoreConfiguration <TEventStoreConnectionStringName> ConfigureSubscribers <TEventStoreConnectionStringName>(
            this EventStoreConfiguration <TEventStoreConnectionStringName> configuration,
            PublishersBySubscription subscribers)
            where TEventStoreConnectionStringName : class
        {
            configuration.ConfigureSubscriptions(subscribers.Select(x => x.Key));

            new RequestsRegistration <PublishersBySubscription>(() => subscribers)
            .Register <ConfiguredSubscribers, Subscriber>(
                (input, provider) => EventStore <AdoNetTransactionUowProvider <TEventStoreConnectionStringName> > .Subscriber(provider),
                Return.List);

            return(configuration);
        }
Пример #4
0
        public static Func <TypeContract, IEnumerable <Func <INotification, NotificationsByPublisher> > > Given(
            this PublishersBySubscription subscriptions,
            params IDomainEvent[] given)
        {
            var list = given.AsEvents().ToList().AsReadOnly();

            return(contract => subscriptions
                   .Where(p => p.Key.NotificationContract.Equals(contract))
                   .Select(p => p.Value)
                   .Select <Publisher, Func <INotification, NotificationsByPublisher> >
                   (
                       publisher =>
                       notification =>
                       publisher(
                           new Event {
                Notification = notification, EventId = new EventId {
                    Value = list.OrderByDescending(g => g.EventId.Value).First().EventId.Value + 1
                }
            },
                           NotificationsByCorrelations(list),
                           () => DateTimeOffset.Now)
                   ));
        }
Пример #5
0
        internal static void Handle(
            SubscriberMessage message,
            PublishersBySubscription publishersBySubscription,
            NotificationsByCorrelations notificationsByCorrelations,
            Func <IEnumerable <Correlation>, int> publisherVersionByPublisherDataContractCorrelations,
            Func <DateTimeOffset> clock,
            Action <NotificationsByPublisherAndVersion> saveNotificationsByPublisherAndVersion,
            Action <IEnumerable <IDomainEvent> > notify)
        {
            var publisher = publishersBySubscription[message.Subscription];

            var notificationsByPublisher = publisher(
                message.Event,
                notificationsByCorrelations,
                clock);

            var notificationsByPublisherAndVersion = Functions.AppendPublisherVersion(
                notificationsByPublisher,
                publisherVersionByPublisherDataContractCorrelations);

            saveNotificationsByPublisherAndVersion(notificationsByPublisherAndVersion);

            notify(notificationsByPublisher.Notifications.Select(x => x.Item1));
        }