var stateMachine = new StateMachine(State.Off); stateMachine.Configure(State.Off) .Permit(Event.TurnOn, State.On); stateMachine.Configure(State.On) .Permit(Event.TurnOff, State.Off); stateMachine.Fire(Event.TurnOn); Debug.Assert(stateMachine.State == State.On); stateMachine.Fire(Event.TurnOff); Debug.Assert(stateMachine.State == State.Off);
var stateMachine = new StateMachineIn this example, we define a state machine with an "Open" state. We want to transition to the "Closed" state when we receive the "Close" event. However, we only want to do this if the "canClose" variable is true. We use a guard to check this condition before making the transition. Package library: Stateless.(State.Open); stateMachine.Configure(State.Open) .PermitIf(Event.Close, State.Closed, CheckIfCanClose); bool CheckIfCanClose() { return canClose; } stateMachine.Fire(Event.Close);