Exemplo n.º 1
0
        /// <summary>
        /// 执行事件委托
        /// </summary>
        /// <param name="event">Event.</param>
        /// <param name="live"><c>true</c>表示实时操作,<c>false</c>表示重放操作</param>
        /// <typeparam name="TEvent">The 1st type parameter.</typeparam>
        protected virtual void ApplyChange <TEvent>(TEvent @event, bool live = true)
            where TEvent : DomainEvent
        {
            // 执行事件内联业务
            var eventHanlders = EventHandlerHelper.GetInlineEventHandlerMethods(this.GetType(), @event);

            Parallel.ForEach(eventHanlders, (h) =>
            {
                h.Invoke(this, new object[] { @event });
            });

            if (live)
            {
                domainEvents.Enqueue(@event);   // 事件入队
            }
        }