private void HandleEvent(IEvent @event) { var eventHandler = GrainInternalEventHandlerProvider.GetInternalEventHandler(this.GetType(), @event.GetType()); if (eventHandler == null) { throw new Exception(string.Format("Could not find event handler for [{0}] of [{1}]", @event.GetType().FullName, this.GetType().FullName)); } eventHandler.Invoke(this, @event); if (this.State.Version + 1 != @event.Version) { throw new Exception(string.Format("inlidate event apply,the event id is {0},", @event.GetType().FullName, this.GetType().FullName)); } //event id is the state's next version number this.State.Version = @event.Version; }
public EventSourcingGrain() { var assembly = this.GetType().Assembly; if (!registerAssembly.Contains(assembly.FullName)) { lock (lockObj) { if (!registerAssembly.Contains(assembly.FullName)) { GrainInternalEventHandlerProvider.RegisterInternalEventHandler(assembly); EventNameTypeMapping.RegisterEventType(assembly); registerAssembly.Add(assembly.FullName); } } } }