/// <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()); }
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); }
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(); }