我正在寻找一种方法来查询状态机中的状态,以找出该状态的可能目的地。我知道一个选项是解析Xaml以获取我需要的信息。还有另外一种方法吗?可能通过查询.NET代码中的状态对象?
目标是减少存储状态转换的业务逻辑的位置数。
答案 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属性,用于指示它们转换到的状态。
顺便提一下,您也可以从该对象中获取触发器和条件! :)
我希望这有帮助!