2011-12-29 2 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. Он имеет расширение WF под названием StateMachineStateTracker. В любой момент вы можете запросить его для текущего StateMachine и его коллекции переходов.

+0

приятное дополнение здесь - это намного легче, чем отражать его: D –

+0

Небольшие комментарии об авторе - Рон Якобс внес свой вклад в сообщество WF, написав страстные и отличные сообщения в блогах, учебные пособия и видеоролики на протяжении многих лет. К сожалению, в возрасте 48 лет ему был поставлен диагноз очень редкой и очень болезненной болезни Деркумов. Здесь вы можете найти блог Won Ron: 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) 

Затем на объекте состояния машины является свойством с именем Transitions - каждый переход имеет к собственности incidating какого государства они переходят в.

Кстати, вы также можете захватить триггер и условие от этого объекта! :)

Надеюсь, это поможет!

Смежные вопросы