public async Task Handle(T @event)
        {
            using (var scope = PaymentsCompositionRoot.BeginLifetimeScope())
            {
                using (var connection = scope.Resolve <ISqlConnectionFactory>().GetOpenConnection())
                {
                    string type = @event.GetType().FullName;
                    var    data = JsonConvert.SerializeObject(@event, new JsonSerializerSettings
                    {
                        ContractResolver = new AllPropertiesContractResolver()
                    });

                    var sql = "INSERT INTO [payments].[InboxMessages] (Id, OccurredOn, Type, Data) " +
                              "VALUES (@Id, @OccurredOn, @Type, @Data)";

                    await connection.ExecuteScalarAsync(sql, new
                    {
                        @event.Id,
                        @event.OccurredOn,
                        type,
                        data
                    });
                }
            }
        }
Example #2
0
        private static void SubscribeToIntegrationEvents(ILogger logger)
        {
            var eventBus = PaymentsCompositionRoot.BeginLifetimeScope().Resolve <IEventsBus>();

            SubscribeToIntegrationEvent <MeetingGroupProposalAcceptedIntegrationEvent>(eventBus, logger);
            SubscribeToIntegrationEvent <NewUserRegisteredIntegrationEvent>(eventBus, logger);
            SubscribeToIntegrationEvent <MeetingAttendeeAddedIntegrationEvent>(eventBus, logger);
        }
Example #3
0
 internal static async Task Execute(ICommand command)
 {
     using (var scope = PaymentsCompositionRoot.BeginLifetimeScope())
     {
         var mediator = scope.Resolve <IMediator>();
         await mediator.Send(command);
     }
 }
Example #4
0
 internal static async Task <TResult> Execute <TResult>(ICommand <TResult> command)
 {
     using (var scope = PaymentsCompositionRoot.BeginLifetimeScope())
     {
         var mediator = scope.Resolve <IMediator>();
         return(await mediator.Send(command));
     }
 }
Example #5
0
        public async Task <TResult> ExecuteQueryAsync <TResult>(IQuery <TResult> query)
        {
            using (var scope = PaymentsCompositionRoot.BeginLifetimeScope())
            {
                var mediator = scope.Resolve <IMediator>();

                return(await mediator.Send(query));
            }
        }
        public void Start()
        {
            long?actualPosition;

            using (var scope = PaymentsCompositionRoot.BeginLifetimeScope())
            {
                var checkpointStore = scope.Resolve <ICheckpointStore>();

                actualPosition = checkpointStore.GetCheckpoint(SubscriptionCode.All);
            }

            _streamStore.SubscribeToAll(actualPosition, StreamMessageReceived);
        }
        private static async Task StreamMessageReceived(
            IAllStreamSubscription subscription, StreamMessage streamMessage, CancellationToken cancellationToken)
        {
            var type     = DomainEventTypeMappings.Dictionary[streamMessage.Type];
            var jsonData = await streamMessage.GetJsonData(cancellationToken);

            var domainEvent = JsonConvert.DeserializeObject(jsonData, type) as IDomainEvent;

            using var scope = PaymentsCompositionRoot.BeginLifetimeScope();

            var projectors = scope.Resolve <IList <IProjector> >();

            foreach (var projector in projectors)
            {
                await projector.Project(domainEvent);
            }

            var checkpointStore = scope.Resolve <ICheckpointStore>();
            await checkpointStore.StoreCheckpoint(SubscriptionCode.All, streamMessage.Position);
        }