Ejemplo n.º 1
0
        public static bool ExecuteGenericMethod(object obj, Type type, string methodName, bool isStatic, Type[] arguments, Type[] variableType, object[] parameters, out object result)
        {
            result = null;

            var res = InformationOnTheTypes.FindGenericMethodsWithGenericArguments(type, isStatic, methodName, arguments, variableType);

            if (res == null)
            {
                return(false);
            }

            try
            {
                result = res.Invoke(obj, parameters);

                if (result != null && res.ReturnType.GetTypeInfo().IsInterface)
                {
                    result = new AutoWrap(result, res.ReturnType);
                }
            }
            catch (Exception)
            {
                return(false);
            }
            return(true);
        }
        // Ищет Дженерик метод по дженерик аргументам и типам параметров
        // Пример использования
        //ТипыПараметров=ъ(Врап.ТипМассив(IParentNode.ПолучитьСсылку(),String.ПолучитьСсылку()));
        // ТипыАргументов=ъ(Врап.ТипМассив(IHtmlAnchorElement.ПолучитьСсылку()));
        ////public static TElement QuerySelector<TElement>(this IParentNode parent, string selectors) where TElement : class, IElement;
        //стр=Врап.FindGenericMethod(ApiExtensions.ПолучитьСсылку(),true,"QuerySelector",ТипыАргументов.ПолучитьСсылку(),ТипыПараметров.ПолучитьСсылку());
        //QuerySelector_AnchorElement = ъ(стр);

        public static RpcMethodInfo FindGenericMethod(Type type, bool isStatic, string methodName, Type[] genericParameters, Type[] methodParameters)
        {
            var res = InformationOnTheTypes.FindGenericMethodsWithGenericArguments(type, isStatic, methodName, genericParameters, methodParameters);

            if (res == null)
            {
                //  AutoWrap.СообщитьОбОшибке("Не найден метод "+ methodName);
                throw new Exception("Не найден метод " + methodName);
            }
            return(res);
        }