bbv.Common.StateMachine
クラスは私が今まで見た中で最高の状態マシンコードです。しかし、ただ一つのことが欠けています:現在の状態を得ること。あなたはそれが簡単に動作を確認することができますbbv.Common.StateMachine(現在はAppccelerate.StateMachine)クラスから現在の状態を取得する方法は?
fsm = new ActiveStateMachine<States, Events>();
fsm.In(States.OrderCreated)
.On(Events.Submitted)
.Goto(States.WaitingForApproval);
fsm.In(States.WaitingForApproval)
.On(Events.Reject)
.Goto(States.Rejected);
fsm.In(States.WaitingForApproval)
.On(Events.Approve)
.Goto(States.BeingProcessed);
fsm.In(States.BeingProcessed)
.On(Events.ProcessFinished)
.Goto(States.SentByMail);
fsm.In(States.SentByMail)
.On(Events.Deliver)
.Goto(States.Delivered);
fsm.Initialize(States.OrderCreated);
fsm.Start();
fsm.Fire(Events.Submitted);
// Save this state to database
:
これは、注文追跡システムです。
しかし、データベースの注文状態を保存します。だから私はどの状態が命令であるかを示すことができるだろう。
私は
fsm.GetCurrentState()
//show this state in the a table
方法を必要としています。実際には方法があります:ExecuteOnEntry
を使用して、すべての州のエントリのローカル値を変更することができます。しかし、私は自分自身を繰り返すので、すべての州のためにExecuteOnEntry
を書くのは面倒です!
これを行うには繊細な方法が必要です。
がやった、それに答えるようにするために、それは簡単ですあなたはbbv.CommonがAppccelerateに改名されたことを知っています。私たちの新しいホームページhttp://www.appccelerate.com –