示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="domainEvent"></param>
        /// <param name="cancellationToken">Propagates notification that operations should be canceled.</param>
        /// <returns></returns>
        public Task Publish(DomainEvent domainEvent, CancellationToken cancellationToken)
        {
            var value = new DomainEventPrimitive
            {
                Id          = domainEvent.EventId,
                AggregateId = domainEvent.AggregateId,
                Body        = domainEvent.ToPrimitives(),
                Name        = domainEvent.GetEventName(),
                OccurredOn  = domainEvent.OccurredOn
            };

            return(_context.Set <DomainEventPrimitive>().AddAsync(value, cancellationToken).AsTask());
        }
示例#2
0
        private async Task Publish(DomainEvent domainEvent)
        {
            var value = new DomainEventPrimitive
            {
                Id          = domainEvent.EventId,
                AggregateId = domainEvent.AggregateId,
                Body        = domainEvent.ToPrimitives(),
                Name        = domainEvent.EventName(),
                OccurredOn  = domainEvent.OccurredOn
            };

            await _context.Set <DomainEventPrimitive>().AddAsync(value);

            await _context.SaveChangesAsync();
        }
        private async Task ExecuteSubscribersAsync(DomainEventPrimitive domainEventPrimitive, CancellationToken cancellationToken)
        {
            var domainEventType = DomainEventsInformation.ForName(domainEventPrimitive.Name);

            var instance = (DomainEvent)Activator.CreateInstance(domainEventType);

            var result = (DomainEvent)domainEventType
                         .GetTypeInfo()
                         .GetDeclaredMethod(nameof(DomainEvent.FromPrimitives))
                         ?.Invoke(instance, new object[]
            {
                domainEventPrimitive.AggregateId,
                domainEventPrimitive.Body,
                domainEventPrimitive.Id,
                domainEventPrimitive.OccurredOn
            });

            await _bus.Publish(new List <DomainEvent> {
                result
            }, cancellationToken);

            _context.Set <DomainEventPrimitive>().Remove(domainEventPrimitive);
        }
示例#4
0
        private async Task ExecuteSubscribers(DomainEventPrimitive domainEventPrimitive)
        {
            Type domainEventType = _domainEventsInformation.ForName(domainEventPrimitive.Name);

            DomainEvent instance = (DomainEvent)Activator.CreateInstance(domainEventType);

            DomainEvent result = (DomainEvent)domainEventType
                                 .GetTypeInfo()
                                 .GetDeclaredMethod(nameof(DomainEvent.FromPrimitives))
                                 .Invoke(instance, new object[]
            {
                domainEventPrimitive.AggregateId,
                domainEventPrimitive.Body,
                domainEventPrimitive.Id,
                domainEventPrimitive.OccurredOn
            });

            await _bus.Publish(new List <DomainEvent> {
                result
            });

            _context.Set <DomainEventPrimitive>().Remove(domainEventPrimitive);
            _context.SaveChanges();
        }