我正在寻找一种方式来查询状态机中的状态,以找出该状态的可能目标。我知道一个选择是解析Xaml以获取我需要的信息。有另一种方法吗?可能通过查询.NET代码中的状态对象?查询状态机中可能的未来状态的当前状态
目标是减少存储状态转换的业务逻辑的位数。
我正在寻找一种方式来查询状态机中的状态,以找出该状态的可能目标。我知道一个选择是解析Xaml以获取我需要的信息。有另一种方法吗?可能通过查询.NET代码中的状态对象?查询状态机中可能的未来状态的当前状态
目标是减少存储状态转换的业务逻辑的位数。
我今天也遇到了这个问题 - 我以为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。
是的,你可以。如果您发出以下语句,则可以从自定义活动中获取状态机本身。
this.GetType().GetProperty("Parent",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance).GetValue(this, null)
然后在状态机对象上有一个名为Transitions的属性 - 每个Transition都有一个To属性来表明它们转换到的状态。
顺便提一句,您还可以从该对象中获取Trigger和Condition! :)
我希望这有助于!
这里不错 - 这是一个比反思它更容易:D – 2012-06-15 22:14:38
关于作者的小评论 - 罗恩雅各布多年来一直致力于WF社区写作激情和优秀的博客文章,教程和视频。不幸的是,在48岁时,他被诊断出非常罕见且非常痛苦的Dercums病。你可以在这里找到Ron的WF博客:https://blogs.msdn.microsoft.com/rjacobs/和个人网站:https://ronljacobs.wordpress.com/。罗恩 - 我们都祝你一切顺利,并希望你能很快回复我们 – 2016-11-23 14:14:44