我有一个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;
            }


        }

最佳答案

这是我所做的:

工作流运行时需要了解参数中使用的类型,因此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));
    }
}

10-06 13:50