将Lambda表达式作为参数传递给Workflow Code Activity

时间:2012-10-24 20:39:45

标签: workflow-foundation-4 workflow-activity

我想知道是否可以将Lambda表达式作为参数传递给Windows工作流代码活动?

我正在尝试基于lambda表达式查询ldap用户对象,该表达式将作为参数传递给Windows工作流代码活动。

1 个答案:

答案 0 :(得分:1)

lambda表达式只是一个引用,就像传递任何其他数据一样传递它。

class Program
{
    static void Main(string[] args)
    {
        var workflow = new ExecuteFunc<int>();
        var inputs = new Dictionary<string, object>();
        inputs["Func"] = new Func<int, int>(maxValue =>
        {
            var rnd = new Random(Environment.TickCount);
            return rnd.Next(maxValue);
        });
        inputs["MaxValue"] = 100;
        WorkflowInvoker.Invoke(workflow, inputs);
    }
}

public class ExecuteFunc<T> : CodeActivity<T>
{
    public InArgument<int> MaxValue { get; set; }
    public InArgument<Func<int, T>> Func { get; set; }

    protected override T Execute(CodeActivityContext context)
    {
        var func = Func.Get(context);
        var maxValue = MaxValue.Get(context);
        var result = func(maxValue);
        Console.WriteLine(result);
        return result;
    }
}