C#单个服务调用多个方法

  原理是根据反射获取到对应方法的服务类的类型,通过方法的Invoke方法调用其它方法。

  相当于中转站,提供服务类名称、方法名称、参数对象的Json格式字符串,调用对应的方法。

  主要代码:

     /// <summary>
        /// 根据参数获取方法返回集合
        /// </summary>
        /// <param name="dataSourceSettingsList">参数集合</param>
        /// <returns>返回对象集合</returns>
        public List<object> GetDataSourceList(List<DataServiceJson> dataSourceSettingsList)
        {
            List<object> result = new List<object>();
            foreach (DataServiceJson dataSourceSettings in dataSourceSettingsList)
            {
                result.Add(GetDataSource(dataSourceSettings));
            }
            return result;
        }

        private object GetDataSource(DataServiceJson dataSourceSettings)
        {
            try
            {
                object result = null;
                if (dataSourceSettings != null)
                {
                    if (!string.IsNullOrEmpty(dataSourceSettings.ServiceName) && !string.IsNullOrEmpty(dataSourceSettings.HandlerMethod))
                    {
                        result = call(dataSourceSettings.ServiceName, dataSourceSettings.HandlerMethod, dataSourceSettings.parameterDataJsonString);
                    }
                }
                return result;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private object call(string serviceName, string methodName, string parameterDataJsonString)
        {
            string serviceFullName = string.Format("BLL.Service.{0}{1}", serviceName, "Service");
            Type type = Type.GetType(serviceFullName);
            MethodInfo methodInfo = type.GetMethod(methodName);
            Dictionary<string, object> keyValue = JsonConvertHelper.DeserializeObject<Dictionary<string, object>>(parameterDataJsonString);
            ParameterInfo[] parameterArray = methodInfo.GetParameters();
            object[] objectArray = new object[parameterArray.Length];
            for (int i = 0; i < parameterArray.Length; i++)
            {
                if (keyValue != null && keyValue.ContainsKey(parameterArray[i].Name))
                {
                    objectArray[i] = JsonConvertHelper.DeserializeObject(keyValue[parameterArray[i].Name], parameterArray[i].ParameterType);
                }
            }
            object serviceInstance = Activator.CreateInstance(type);
            if (serviceInstance != null)
            {
                return methodInfo.Invoke(serviceInstance, objectArray);
            }
            else
            {
                throw new Exception("方法不存在!");
            }
        }

  其中的参数对象DataServiceJson:

public class DataServiceJson
    {
        /// <summary>
        /// 服务类名
        /// </summary>
        public string ServiceName { get; set; }

        /// <summary>
        /// 方法名
        /// </summary>
        public string HandlerMethod { get; set; }

        /// <summary>
        /// 参数Json格式
        /// </summary>
        public string parameterDataJsonString { get; set; }
    }

  JsonConvertHelper帮助类放在另一个随笔

原文地址:https://www.cnblogs.com/gzbnet/p/8075028.html