예제 #1
0
        protected override string GetInvokeArguments(MethodInfo methodInfo)
        {
            var invokeArguments = string.Empty;
            int count           = 1;
            var parameters      = methodInfo.GetParameters();

            foreach (ParameterInfo paramInfo in parameters)
            {
                if (paramInfo.ParameterType.GetInterface("Orleans.Runtime.IAddressable") != null && !typeof(GrainReference).IsAssignableFrom(paramInfo.ParameterType))
                {
                    invokeArguments += string.Format("If(typeof({0}) is Global.Orleans.Grain,{2}.{1}.Cast({0}.AsReference()),{0})",
                                                     GrainInterfaceData.GetParameterName(paramInfo),
                                                     GrainInterfaceData.GetFactoryClassForInterface(paramInfo.ParameterType),
                                                     paramInfo.ParameterType.Namespace);
                }
                else
                {
                    invokeArguments += GrainInterfaceData.GetParameterName(paramInfo);
                }

                if (count++ < parameters.Length)
                {
                    invokeArguments += ", ";
                }
            }
            return(invokeArguments);
        }