2014-07-17 2 views
4

stateless 우리의 응용 프로그램에서 상태 머신의 논리를 구현하는 데 사용하고 있습니다. AcceptedFile 상태가 있습니다. 다른 내부 (하위) states.The 문제는 어떻게 내 초기 상태를 나타내는 해야할지 모르겠다 그래서상태 비 저장 : 상태의 초기 상태를 정의하는 방법은 무엇입니까?

machine.Configure(State.AcceptedFile) 
        .OnEntry(() => machine.Fire(Trigger.MakeReadyForAdvertising)) 
        .Permit(Trigger.MakeReadyForAdvertising,State.ReadyForAdvertising) 
여기

ReadyForAdvertising입니다 AcceptedFile .This의 내부 상태는 대부분의 잘 작동 : AccptedFile 상태로 기계 운송 그것은 또한 내가이 동작을 시뮬레이션하기 위해 무엇을했는지 초기 내부 state.Here의 자동 전송을 할 때 시나리오지만 내 상태 기계의 초기 상태를 AcceptedFile으로 설정할 때마다 :

var statemachine=new StateMachine<State,Trigger>(State.AcceptedFile) 
... 

자동 전환이 일어나지 않으므로 컴퓨터가 ReadyForAdvertising 대신 AcceptedFile 상태가됩니다.

이 동작을 구현하는 더 좋은 방법이 있습니까?

+0

초기 상태가되는 유일한 목적으로 더미 상태를 만든 다음 즉시 트리거를 실행하여 올바른 상태로 이동시킵니다. –

+0

내가 그 일을하고있는 방법이라고 생각해. 감사합니다. – Beatles1692

+1

@ LasseV.Karlsen 그게 작동한다면, 왜 OP가 그것을 받아 들일 수 있습니까? 건배 – superjos

답변

0

디자인 된 방식 인 것 같습니다. OnExit은 무국적 성격 때문에 처리하기에 가장 안전한 곳입니다.

+0

제안 된 솔루션에 대해 자세히 설명해 주시겠습니까? 그 질문에 어울리는 것을 얻지 못했습니다. TA – superjos

4

StateMachine.cs의 문서 상태 :

하위 상태가 초 국가의 허용 전환을 상속합니다. superstate의 외부로부터 substate에 직접 들어가면, superstate에 대한 entry action이 실행됩니다. 마찬가지로 하위 상태에서 슈퍼 상태로 나가면 슈퍼 상태에 대한 종료 동작이 실행됩니다. 그래서 ReadyForAdvertising 이것은 AcceptedFile &의 입력 작업을 실행합니다

var statemachine=new StateMachine<State,Trigger>(State.ReadyForAdvertising) 

(해당 트리거가 수신 될 때 그것을 또는 전환) 기본 내부 단지 ReadyForAdvertising에 초기 상태를 설정 상태 인 경우

ReadyForAdvertising하고 현재 상태를 ReadyForAdvertising으로 설정하십시오.

+1

이 접근 방법은 하위 상태를 알기 위해 연결됩니다. 부모 상태로 들어갈 때 시작 부분 상태로 자동 전환 할 수 있다면 더 좋습니다. – Schneider

관련 문제