Generic InArgument在尝试获取值时抛出异常

时间:2013-03-26 16:07:13

标签: c#-4.0 workflow-foundation-4 workflowservice

我有一个Activity,我在没有类型的情况下声明了InArgument(因为我想在设计时知道Expression的类型)。

当我执行活动时,我在var contentTelegram行中收到此错误:

"The argument of type '<type>' cannot be used.  Make sure that it is declared on an activity."

这是我的代码:

public InArgument Content { get; set; }


protected override PlcMessage Execute(CodeActivityContext context)
        {

            try
            {
                var contentTelegram = Content.Get(context); 

               return new PlcMessage();
            }
            catch (Exception ex)
            {

                throw;
            }


        }

1 个答案:

答案 0 :(得分:3)

这是我做的:

工作流运行时需要知道参数中使用的类型,因此cacheMetadata是使其工作的关键,CacheMetadata使用反射来了解参数,注意只适用于简单的情况。

public sealed class MyActivity: CodeActivity
{
    private RuntimeArgument outMyRuntimeArgument;

    // Define an activity input argument of type string
    public OutArgument MyUntypedArgument { get; set; }


    protected override void CacheMetadata(CodeActivityMetadata metadata)
    {
        outMyArgument= new RuntimeArgument("MyUntypedArgument", MyUntypedArgument.ArgumentType, ArgumentDirection.Out);
        metadata.Bind(MyUntypedArgument, outArgument);
        metadata.AddArgument(outMyArgument);
    }     


    protected override void Execute(CodeActivityContext context)
    {
        context.SetValue(outMyRuntimeArgument, Activator.CreateInstance(Type));
    }
}