Запрос текущего состояния для возможных будущих состояний в State Machine - PullRequest
2 голосов
/ 29 декабря 2011

Я ищу способ запроса состояния в автомате, чтобы выяснить, каковы возможные назначения для этого состояния. Я знаю, что один из вариантов - разобрать Xaml на предмет информации, которая мне нужна. Есть ли другой способ? Возможно, путем запроса объекта состояния в коде .NET?

Цель состоит в том, чтобы уменьшить количество мест, в которых хранится бизнес-логика для переходов состояний.

Ответы [ 2 ]

3 голосов
/ 14 июня 2012

Я тоже сталкивался с этим вопросом сегодня - думал, что код 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 и его коллекцию переходов.

2 голосов
/ 24 февраля 2012

Да, вы можете.Если вы выполните следующую инструкцию, вы сможете получить сам конечный автомат из пользовательского действия.

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

Тогда на конечном автомате объект является свойством с именем Transitions - каждый Transition имеет свойство To, указывающее, в каком состоянии они находятся.Переход к.

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

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

...