Как передать объекты в потомки в WF4? - PullRequest
1 голос
/ 29 сентября 2011

Я новичок в Workflow Foundation 4, и несколько дней я боролся за то, чтобы сделать что-то, что кажется совершенно тривиальным. Обратите внимание, что я в основном кодирую действия на C #, а не все, что было с XAML.

Чтобы подвести итог моего вопроса, я пытаюсь выяснить, как программно передать объект сеанса (или просто любой объект!) Всем дочерним действиям-потомкам (или, по крайней мере, действиям, которые научили использовать сессии).

У меня уже есть «внешнее» действие, на которое вы можете отбросить любое другое действие (включая такие композиты, как последовательность, блок-схема и все остальное). Таким образом, у него есть только одно прямое дочернее действие, но оно, в свою очередь, может иметь несколько поколений потомков (содержание которых может различаться), что важно иметь в виду. Я не знаю заранее, сколько будет потомков или каков их тип.

«Внешнее» действие, прежде чем оно планирует дочернее действие, устанавливает какой-то объект сеанса (предположим, что это просто объект с именем «Session»). Вот основная проблема: у меня есть некоторые специализированные пользовательские внутренние действия, которые должны знать, как получить эту ссылку на Сессию (то есть другие действия не будут знать о Сессии или не будут обязаны). Эти обычные внутренние действия могут происходить на несколько поколений от «внешней» деятельности, поэтому я не могу просто позволить внешней активности внедрить Сессию в своего единственного потомка или что-то в этом роде.

Помимо использования некоторых очень дорогостоящих рекурсивных размышлений, подверженных беспорядкам и ошибкам, я не могу найти никакого способа сделать это. Я пытался использовать переменные рабочего процесса, InArguments и OutArguments, но мне не повезло заставить их продолжать работу на протяжении поколений. Я думаю, что переменные - это путь, но у меня были проблемы с поиском правильного способа сделать это (я прошу прощения за свое новшество). На данный момент я даже не уверен, стоит ли мне подходить к этому, передавая объект вниз или заставляя потомков искать обратно.

Какой лучший способ сделать это?

1 Ответ

1 голос
/ 30 сентября 2011

Есть два варианта.

  1. Используйте расширение - дочерние действия, которые знают о расширении, могут получить его и прочитать данные из него.
  2. Используйте действие области действия, которое устанавливает свойство выполнения - см. Пример свойств выполнения
...