public async Task HandleAsync( AuditEventType action, EntityDomainEvent <IAudit> args, Func <PropertyEntry, bool> predicate) { var now = DateTime.Now; var audit = new Audit { Module = args.EntityType.Name, Action = action, Date = now.Date, Time = now.TimeOfDay }; foreach (var property in args.Properties.Where(predicate).Where(w => !Attribute.IsDefined(w.Info, typeof(IsNotAudit)))) { if (property.CurrentValue is IList) { continue; } var originalValue = GetValue(property.OriginalValue); var currentValue = GetValue(property.CurrentValue); audit.Data.Add(new AuditData(audit, property.Info.Name, originalValue, currentValue)); } await _session.SaveAsync(audit); }
public async Task HandleAsync( AuditEventType type, EntityDomainEvent <IAudit> args) { Console.WriteLine($"{DateTime.Now:s} - {type}: {args.EntityType}"); await Task.CompletedTask; }
public void Apply(EntityDomainEvent domainEvent) { domainEvent.EntityId = Id; if (!((IHaveATestMode)this).IsInTestMode) { AggregateRoot.Apply(domainEvent); } _uncommittedEvents.Enqueue(domainEvent); ApplyEventToInternalState(domainEvent); }
// // TODO: Cache event handler // private void ApplyEventToInternalState(EntityDomainEvent domainEvent) { var domainEventType = domainEvent.GetType(); var domainEventTypeName = domainEventType.Name; var entityType = GetType(); var methodInfo = entityType.GetMethod(GetEventHandlerMethodName(domainEventTypeName), BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new[] { domainEventType }, null); if (methodInfo == null || !EventHandlerMethodInfoHasCorrectParameter(methodInfo, domainEventType)) { return; } methodInfo.Invoke(this, new[] { domainEvent }); }