Bea*_*692 6 c# state-machine stateless-state-machine
我在我们的应用程序中使用无状态来实现状态机的逻辑.我们有一个AcceptedFile具有其他内部(子)状态的状态.问题是我不知道如何在我的代码中指示初始内部状态,以便当机器转移到AccptedFile状态它也会自动转换到其初始内部状态.这就是我为模拟这种行为所做的:
machine.Configure(State.AcceptedFile)
.OnEntry(() => machine.Fire(Trigger.MakeReadyForAdvertising))
.Permit(Trigger.MakeReadyForAdvertising,State.ReadyForAdvertising)
Run Code Online (Sandbox Code Playgroud)
这ReadyForAdvertising是一个内部状态.AcceptedFile这在大多数情况下工作正常,但每当我将状态机的初始状态设置为AcceptedFile这样:
var statemachine=new StateMachine<State,Trigger>(State.AcceptedFile)
...
Run Code Online (Sandbox Code Playgroud)
不会发生自动转换,因此机器将处于AcceptedFile状态而不是ReadyForAdvertising.
有没有更好的方法来实现这种行为?
小智 5
StateMachine.cs中的文档指出:
子状态继承其超状态的允许转换。当从超级状态外部直接进入子状态时,将执行超级状态的进入操作。同样,当从子状态离开到超级状态之外时,将执行超级状态的退出动作。
因此,如果ReadyForAdvertising是您的默认内部状态,只需将初始状态设置为ReadyForAdvertising(或在收到适当的触发器时转换为初始状态)
var statemachine=new StateMachine<State,Trigger>(State.ReadyForAdvertising)
Run Code Online (Sandbox Code Playgroud)
这将执行AcceptedFile和ReadyForAdvertising的输入动作,并使您的当前状态为ReadyForAdvertising。