/// <summary> /// Initialize by StateMachineDefinition instance. /// </summary> /// <param name="def">StateMachineDefinition instance</param> /// <param name="logger">the logger used to</param> /// <param name="actionInitializer"></param> public void Initialize(StateMachineDefinition def, Func <IAction, IAction> actionInitializer) { _actionBuilder = new ActionBuilder(def.ActionPackage, actionInitializer); foreach (StateDefinition stateDef in def.States) { CLRLogger.GetInstance().LogDevInfo(string.Format("Load State {0}", stateDef.ID)); State state = new State(_actionBuilder); state.Initialize(stateDef); if (States.Contains(state)) { throw new StateMachineException(string.Format("try to add an existed state {0}", state.ID)); } States.Add(state); if (state.Category == StateCategory.INITIAL) { CurrentState = state; } } foreach (TransitionDefinition tranDef in def.Transitions) { LoadTransaction(tranDef); } }
public State(ActionBuilder actionBuilder) { Category = StateCategory.NORMAL; _actionBuilder = actionBuilder; }