c# 动态调用方法

 1        /// <summary>
 2        /// 动态反射
 3        /// </summary>
 4        /// <param name="cName">类,含命名空间(命名空间+类名,程序集即项目名称)</param>
 5        /// <param name="fName">方法</param>
 6        /// <param name="objArray">传参</param>
 7        /// <returns></returns>
 8        public async Task<List<T>> ReflectClassAndFunction<T>(string cName, string fName, object[] objArray)
 9        {
10            try
11            {
12                //获取类
13                Type type = Type.GetType(cName);
14                //获取类下的信息
15                ConstructorInfo constructor = type.GetConstructors().FirstOrDefault();
16                ParameterInfo[] parameter = constructor.GetParameters();
17                //实例类的传参,数据链接和用户
18                object[] dllArray = new object[parameter.Length];
19                dllArray[0] = _dbClient;
20                dllArray[1] = _userManager;
21                //创建指定类实例
22                object obj = Activator.CreateInstance(type, dllArray);
23                //获取指定方法:方法名,查找成员类型
24                MethodInfo method = type.GetMethod(fName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
25                //执行方法
26                Task<List<T>> rudy = (Task<List<T>>)method.Invoke(obj, objArray);
27                //返回结果
28                return rudy.Result;
29            }
30            catch (Exception ex)
31            {
32                throw Oops.Oh(ex.Message);
33            }
34        }

 

posted @ 2024-11-15 16:16  进步中的小牛  阅读(71)  评论(0)    收藏  举报