Xaml 查询状态机中可能的未来状态的当前状态

Xaml 查询状态机中可能的未来状态的当前状态,xaml,workflow,workflow-foundation-4,state-machine,Xaml,Workflow,Workflow Foundation 4,State Machine,我正在寻找一种在状态机中查询状态的方法,以找出该状态的可能目的地。我知道一种选择是解析Xaml以获取我需要的信息。还有别的办法吗?可能是通过查询.NET代码中的状态对象 目标是减少存储状态转换的业务逻辑的位置数。是的,您可以。如果发出以下语句,则可以从自定义活动获取状态机本身 this.GetType().GetProperty("Parent", System.Reflection.BindingFlags.NonPublic | System.Reflection.B

我正在寻找一种在状态机中查询状态的方法,以找出该状态的可能目的地。我知道一种选择是解析Xaml以获取我需要的信息。还有别的办法吗?可能是通过查询.NET代码中的状态对象


目标是减少存储状态转换的业务逻辑的位置数。

是的,您可以。如果发出以下语句,则可以从自定义活动获取状态机本身

this.GetType().GetProperty("Parent",
    System.Reflection.BindingFlags.NonPublic |
        System.Reflection.BindingFlags.Instance).GetValue(this, null)
然后在状态机对象上有一个名为Transitions的属性——每个转换都有一个To属性,该属性指示它们转换到的状态

顺便说一下,您还可以从该对象获取触发器和条件!:)


我希望这有帮助

我今天也遇到了这个问题——我原以为mperrenoud03的代码可以解决这个问题,但可惜它在.NET4.5RC下对我不起作用。原因是它反映了内部/私有类型System.Activities.Statements.InternalState,而不是System.Activities.Statements.State

InternalState对象有一个Transitions集合,我可以通过进一步的反射来获得它。。。但我觉得这让我通过了嗅觉测试


到目前为止,我发现一个有效的解决方案是以下NuGet:。它有一个名为StateMachineStateTracker的WF扩展。在任何时候,你都可以向它索取当前的状态机及其转换集合。

这里的添加很好——这比反映它要容易得多:DSmall对作者的评论——多年来,罗恩·雅各布斯通过撰写热情而优秀的博客文章、教程和视频为WF社区做出了贡献。不幸的是,他在48岁时被诊断出患有非常罕见和非常痛苦的德库姆斯病。你可以在这里找到Ron的WF博客和个人网站。罗恩-我们都祝你一切顺利,希望你能尽快回复我们