2011-12-29 100 views
2

我正在尋找一種方式來查詢狀態機中的狀態,以找出該狀態的可能目標。我知道一個選擇是解析Xaml以獲取我需要的信息。有另一種方法嗎?可能通過查詢.NET代碼中的狀態對象?查詢狀態機中可能的未來狀態的當前狀態

目標是減少存儲狀態轉換的業務邏輯的位數。

回答

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。

+0

這裏不錯 - 這是一個比反思它更容易:D – 2012-06-15 22:14:38

+0

關於作者的小評論 - 羅恩雅各布多年來一直致力於WF社區寫作激情和優秀的博客文章,教程和視頻。不幸的是,在48歲時,他被診斷出非常罕見且非常痛苦的Dercums病。你可以在這裏找到Ron的WF博客:https://blogs.msdn.microsoft.com/rjacobs/和個人網站:https://ronljacobs.wordpress.com/。羅恩 - 我們都祝你一切順利,並希望你能很快回復我們 – 2016-11-23 14:14:44

2

是的,你可以。如果您發出以下語句,則可以從自定義活動中獲取狀態機本身。

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

然後在狀態機對象上有一個名爲Transitions的屬性 - 每個Transition都有一個To屬性來表明它們轉換到的狀態。

順便提一句,您還可以從該對象中獲取Trigger和Condition! :)

我希望這有助於!