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