Exemple #1
0
        private void StartProcess <TEvent>(TEvent @event)
            where TEvent : IEvent
        {
            var eventType = typeof(TEvent);
            var starter   = _definition.GetStarterPredicate <TEvent>()(@event, GetInstanceData());

            if (!starter)
            {
                throw new Exception($"Definition {_definition.GetType()} does not accept eventType {eventType} as a starter event.");
            }

            var idSelector = _definition.GetCorrelationFilter <TEvent>();

            if (idSelector == null)
            {
                throw new ArgumentNullException($"No correlation defined for eventType {eventType} in definition {_definition.GetType()}");
            }

            if (State != InstanceStates.NotStarted)
            {
                throw new Exception($"Cannot start an instance which is in state {State}");
            }

            var identity = idSelector(@event);

            Emit(new ProcessStarted(identity));
        }