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

 

posted @ 2022-06-17 10:44  六镇2012  阅读(118)  评论(0编辑  收藏  举报