public TypeDrivenStateMachine <TState, TContext> Apply <TInput>(TInput input) { Console.WriteLine("Applying"); Type type = input.GetType(); Transition <object> transition = TransitionFor(input); Console.WriteLine("Got transaction"); Console.WriteLine("Input: " + input.GetType()); if (transition == null) { Console.WriteLine("Throwing"); throw new InvalidInputException(input, State, _transitions[State].Keys.ToList()); } Console.WriteLine("applying"); State = transition.State; Context = transition.Apply(Context, input); Console.WriteLine("Returning"); return(this); }
public AsyncStateMachine <TState, TContext> Apply <TInput>(TInput input) { Transition <TInput> transition = TransitionFor <TInput>(); if (transition == null) { throw new InvalidInputException(input, State, _transitions[State].Keys.ToList()); } State = transition.State; Context = transition.Apply(Context, input); return(this); }
public void Try(Action<ModelState> stateTransitionAction) { var modelStateTransition = new Transition<ModelState>(this, stateTransitionAction); modelStateTransition.Apply(); var unsatisfiedModelPropertyConstraints = _modelStateConstraints.GetModelPropertyConstraintsNotSatisfiedBy(this); if (unsatisfiedModelPropertyConstraints.Any()) { modelStateTransition.Rollback(); throw new UnsatisfiedModelConstraintsException(unsatisfiedModelPropertyConstraints); } }