コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: Cat.cs プロジェクト: StefanSmith/DomainValidation
            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);
                }
            }