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

时间:2011-12-29 16:48:03

标签: xaml workflow workflow-foundation-4 state-machine

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

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

2 个答案:

答案 0 :(得分:3)

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

InternalState对象有一个Transitions集合,我可以通过进一步反思获得它...但我觉得这让我超越了气味测试。

我发现到目前为止工作的解决方案是NuGet:http://nuget.org/packages/Microsoft.Activities.Extensions。它有一个名为 StateMachineStateTracker 的WF扩展。您可以随时向它询问当前的StateMachine及其Transitions集合。

答案 1 :(得分:2)

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

this.GetType().GetProperty("Parent",
    System.Reflection.BindingFlags.NonPublic |
        System.Reflection.BindingFlags.Instance).GetValue(this, null)

然后在状态机对象上有一个名为Transitions的属性 - 每个Transition都有一个To属性,用于指示它们转换到的状态。

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

我希望这有帮助!