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