InArgument接收任意类型参数,如何获取InArgument的value
一个自定义Activity,定义了一个InArgument类型的参数,用来接收任意类型的参数。
public class TestActivity : NativeActivity { public InArgument CurrentInArgument { get; set; } protected override void Execute(NativeActivityContext context) { var Result = CurrentInArgument.Get(context); } }
当通过CurrentInArgument.Get(context)获取InArgument的值时会报错
"The argument of type '<type>' cannot be used. Make sure that it is declared on an activity."
原因是InArgument在声明时没有定义类型,一般情况下使用InArgument<T>会定义T的类型,传入固定类型的参数,然后通过InArgument.Get(context)获取对应的值。
使用InArgument是为了能传入任意类型的参数,在运行时动态获取参数,解决方法如下
public class TestActivity : NativeActivity
{
private RuntimeArgument CurrentInArgumentTemp;
public InArgument CurrentInArgument { get; set; }
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
base.CacheMetadata(metadata);
CurrentInArgumentTemp = new RuntimeArgument("CurrentInArgument", CurrentInArgument.ArgumentType, ArgumentDirection.In);
metadata.Bind(CurrentInArgument, CurrentInArgumentTemp);
metadata.AddArgument(CurrentInArgumentTemp);
}
protected override void Execute(NativeActivityContext context)
{
var Result = CurrentInArgumentTemp.Get(context);
}
}
使用CacheMetadata,在执行Execute之前,将InArgument转成RuntimeArgument,然后通过RuntimeArgument获取参数的值。对应的OutArgument也可类似操作。
参考:http://cn.voidcc.com/question/p-nzmbyrok-cp.html