2011-12-29 7 views
2

ステートマシンで状態を照会して、その状態の可能な宛先を調べる方法を探しています。 1つのオプションは、必要な情報を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とそのトランジションのコレクションを求めることができます。

+0

それはそれを反映するよりもずっと簡単です:D –

+0

著者についての小さなコメント - Ron Jacobsは、長年にわたって情熱的で優れたブログ投稿、チュートリアル、ビデオを書くことでWFコミュニティに貢献しました。残念なことに48歳で、非常にまれで非常に痛いDercums病と診断されました。 RonのWFブログ(https://blogs.msdn.microsoft.com/rjacobs/)と個人用サイト(https://ronljacobs.wordpress.com/)があります。ロン - 私たちは皆皆様に最善を尽くしたいと思います。 –

2

はい、できます。次の文を発行すると、カスタムアクティビティからステートマシン自体を取得できます。ステートマシンオブジェクト上

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

は、トランジションというプロパティである - 各遷移は、彼らがどのように移行州incidatingにプロパティを持っています。

また、そのオブジェクトからトリガと条件を取得することもできます。 :)

私はこれが助けてくれることを願っています!

関連する問題