public MultiStateChain(Func <User, StateChain> stateChainGenerator, StateExit exit = null, TimeSpan?stateDuration = null) : base(exit: exit, stateTimeoutDuration: stateDuration)
 {
     this.Entrance.Transition((User user) =>
     {
         StateChain toReturn = stateChainGenerator(user);
         toReturn.Transition(this.Exit);
         return(toReturn);
     });
 }
        public MultiStateChain(Func <User, List <State> > stateChainGenerator, StateExit exit = null, TimeSpan?stateDuration = null) : base(exit: exit, stateTimeoutDuration: stateDuration)
        {
            this.Entrance.Transition((User user) =>
            {
                List <State> statesList = stateChainGenerator(user);
                if (statesList.Count <= 0)
                {
                    // If no states in chain, go straight to exit.
                    return(this.Exit);
                }

                StateChain toReturn = new StateChain(statesList);
                toReturn.Transition(this.Exit);
                return(toReturn);
            });
        }