Beispiel #1
0
        public RpcMethodInfo(RpcMethodInfo methodInfo, int parametersCount)
        {
            Method          = methodInfo.Method;
            ParametersCount = parametersCount;
            ParamsCount     = methodInfo.ParametersCount;
            ReturnType      = methodInfo.ReturnType;

            Parameters = new RpcTypeInfo[parametersCount];

            var count = methodInfo.HasDefaultValue ? parametersCount : ParamsCount - 1;

            for (int i = 0; i < count; i++)
            {
                Parameters[i] = methodInfo.Parameters[i];
            }

            if (methodInfo.HasDefaultValue)
            {
                HasDefaultValue    = true;
                FirstDefaultParams = methodInfo.FirstDefaultParams;
                return;
            }

            HasParams   = true;
            TypeParams  = methodInfo.TypeParams;
            ElementType = methodInfo.ElementType;

            var rpcTypeInfo = InformationOnTheTypes.GetTypeInformation(methodInfo.TypeParams);

            for (int i = ParamsCount - 1; i < parametersCount; i++)
            {
                Parameters[i] = rpcTypeInfo;
            }
        }
Beispiel #2
0
        public RpcMethodInfo(MethodInfo methodInfo)
        {
            Method = methodInfo;

            ParameterInfo[] parameters = Method.GetParameters();
            HasParams       = false;
            ParametersCount = parameters.Length;
            ParamsCount     = 0;
            if (ParametersCount > 0)
            {
                HasParams = parameters[parameters.Length - 1].GetCustomAttributes(typeof(ParamArrayAttribute), false).GetEnumerator().MoveNext();
            }

            if (HasParams)
            {
                TypeParams  = parameters[parameters.Length - 1].ParameterType.GetElementType();
                ElementType = InformationOnTheTypes.GetTypeInformation(TypeParams);
            }

            Parameters = new RpcTypeInfo[ParametersCount];

            for (int i = 0; i < parameters.Length; i++)
            {
                var param = parameters[i];
                Parameters[i] = InformationOnTheTypes.GetTypeInformation(param.ParameterType);

                if (!HasDefaultValue && param.HasDefaultValue)
                {
                    HasDefaultValue = true;

                    FirstDefaultParams = i;
                }
            }

            IsGeneric = methodInfo.IsGenericMethod && methodInfo.IsGenericMethodDefinition;

            if (IsGeneric)
            {
                GenericMethod = new GenericMethodData(Method, Parameters);
            }
            ReturnType = methodInfo.ReturnType.GetTypeInfo().IsInterface ? methodInfo.ReturnType : null;
        }