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); }