我有一台状态机,如下所示。我已使用Stateless在C#中实现了这一点。
在On
触发器的情况下,RequestStatus
状态可以重新进入。发生这种情况时,状态机可以处于以下任何状态:On
,On > Standby
或On > Operational
。现在,对于此触发器,当前状态应保持原样,并且只应返回状态,即执行ReturnStatus()
。
可以使用OnEntryFrom(Trigger, Action)
方法执行取决于触发的功能。但问题是,如果我设置OnEntryFrom
状态为On
,则每次触发触发器时,如果其中一个子状态处于活动状态,则首先退出,然后On
状态退出然后OnEntry
On
状态发生。
现在我想要的是,无论状态机处于活动状态的3个状态中的哪一个,对于RequestStatus
触发器,只需执行ReturnStatus()
方法。
我可以设置OnEntryFrom(PowerOn, () => Initialize())
和OnEntryFrom(RequestStatus, () => ReturnStatus())
的一种方法。通过添加新触发器StandbyRequestStatus
和OperationalRequestStatus
对子状态执行相同操作,并根据之前激活的触发器触发它们。我觉得这很乏味,特别是如果变电站的数量增加的话。
另一种方法是保留子状态并仅处理一次。但我无法在Stateless中找到办法。
使用Stateless是否可以实现?有没有人这样做过?