コード例 #1
0
        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);
        }
コード例 #2
0
        public async Task HandleAsync(
            AuditEventType type,
            EntityDomainEvent <IAudit> args)
        {
            Console.WriteLine($"{DateTime.Now:s} - {type}: {args.EntityType}");

            await Task.CompletedTask;
        }
コード例 #3
0
ファイル: Entity.cs プロジェクト: dagilleland/SimpleCQRS
        public void Apply(EntityDomainEvent domainEvent)
        {
            domainEvent.EntityId = Id;

            if (!((IHaveATestMode)this).IsInTestMode)
            {
                AggregateRoot.Apply(domainEvent);
            }

            _uncommittedEvents.Enqueue(domainEvent);
            ApplyEventToInternalState(domainEvent);
        }
コード例 #4
0
ファイル: Entity.cs プロジェクト: dagilleland/SimpleCQRS
        //
        // 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 });
        }