Как ActivityContext, LocationReferenceEnvironment, Аргументы и Переменные работают в WF4? - PullRequest
2 голосов
/ 26 апреля 2011

Я понимаю, что управление потоком и контекст разделены на WF4, но я спрашиваю вас, как я могу контролировать контекст данного рабочего процесса.

WorkflowApplication имеет свойство HostEnvironment, которое в соответствии с документацией получает или задает корневую среду для аргументов и переменных экземпляра рабочего процесса .

Какая разница между LocationReferenceEnvironment и ActivityContext самой? Кто создает и контролирует контекст? Насколько я понимаю, каждое действие имеет собственный контекст, но не все действия имеют переменные, например.

Я хочу получить максимальный контроль над контекстом данного рабочего процесса, но у меня возникают проблемы с пониманием внутренней работы всего этого. Может ли кто-нибудь объяснить мне это и / или указать мне несколько хороших статей, желательно с точки зрения программирования. К сожалению, MSDN, а точнее .NET Framework Class Library, не хватает хорошей документации WF4.

1 Ответ

2 голосов
/ 26 апреля 2011

Я не думаю, что здесь есть какая-либо документация по внутренним компонентам. Не уверен, принесет ли это вам много пользы, большинство, если не весь этот материал, встроен в WF4 и не может быть изменен, даже если вы захотите.

По сути, ссылка на местоположение - это место для хранения данных, что-то, представленное переменной в вашем рабочем процессе. По умолчанию вы можете добавлять переменные только в составные действия. Здесь нет технической причины, просто переменная используется для обмена данными между несколькими действиями, поэтому добавление их в действие, у которого нет дочерних элементов или только одно, ничего не покупает. Тем не менее, вы можете делать это в своей собственной деятельности, если хотите.

Что вы пытаетесь добиться, чтобы вам требовался максимальный контроль над контекстом активности?

Обновление: Не уверен, поможет ли это, но именно так вы можете создавать VB-выражения в коде:

var wf = new Sequence()
{
    Variables =
    {
        new Variable<string>("var1", "Some value"),
        new Variable<int>("var2", c=> Environment.TickCount),
    },
    Activities =
    {
        new WriteLine() {
            Text = new VisualBasicValue<string>("\"String value: \" & var1 ")
        },
        new WriteLine() {
            Text = new VisualBasicValue<string>("\"Int value: \" & var2 ")
        }

    }
};

WorkflowInvoker.Invoke(wf);
...