private void OnTimerElapsed(object sender, ElapsedEventArgs e)
        {
            try
            {
                timer.Stop();
                using (var db = new EventCommitsDomainContext())
                {
                    var query = db.DomainEventCommits.Where(c => c.IsDispatched == false);
                    foreach (var item in query)
                    {
                        //hardcoding a lot of assumptions in this crappy code, it's a sample.
                        var evt           = item.Event;
                        var evtTypeString = ConcreteProxyCreator.GetValidTypeName(evt.GetType());
                        var evtType       = Type.GetType(evtTypeString);
                        var handlerType   = typeof(IHandleEvent <>).MakeGenericType(evtType);
                        var handlers      = this.container.ResolveAll(handlerType);
                        foreach (var handler in handlers)
                        {
                            var method = handler.GetType()
                                         .GetMethod("Handle");
                            method.Invoke(handler, new[] { evt });
                        }

                        item.IsDispatched = true;
                    }

                    db.SaveChanges();
                }
            }
            finally
            {
                timer.Start();
            }
        }
Пример #2
0
        protected void RaiseEvent <TEvent>(Action <TEvent> builder) where TEvent : IDomainEvent
        {
            var newVersion = this.Version + 1;
            var @event     = ConcreteProxyCreator.CreateInsance <TEvent>();

            @event.Id               = Guid.NewGuid();
            @event.OccurredAt       = DateTimeOffset.Now;
            @event.AggregateId      = this.Id;
            @event.AggregateVersion = newVersion;

            builder(@event);

            this._uncommittedEvents.Add(@event);
            this.Version = newVersion;
        }