bbv.Common.StateMachine
klasa to najlepszy kod maszynowy stanu, jaki kiedykolwiek widziałem. Ale brakuje mu tylko jednej rzeczy: uzyskania aktualnego stanu.Jak uzyskać bieżący stan z klasy bbv.Common.StateMachine (teraz Appccelerate.StateMachine)?
Jest to system śledzenia zamówienie:
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
Można zobaczyć, jak to działa łatwo.
Ale chcę zapisać stan zamówienia w bazie danych. Będę w stanie pokazać, w jakim stanie jest kolejność.
muszę metodę
fsm.GetCurrentState()
//show this state in the a table
. Właściwie jest sposób: mogę użyć ExecuteOnEntry
i zmienić wartość lokalną na każdym wpisie stanu. Ale będzie kłopotliwe napisanie ExecuteOnEntry
dla każdego stanu, ponieważ będę się powtarzać!
Musi to być delikatny sposób.
Czy wiesz, że nazwa bbv.Common została zmieniona na Appccelerate. Sprawdź naszą nową stronę domową http://www.appccelerate.com –