zoukankan      html  css  js  c++  java
  • 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帮助类放在另一个随笔

  • 相关阅读:
    Java精选笔记_EL表达式
    Java精选笔记_文件上传与下载
    Java精选笔记_Servlet事件监听器
    windows 下安装perl Tk 模块
    html 基础
    用grep 筛选fastq 序列
    php 统计fasta 序列长度和GC含量
    perl 截取 fastq文件
    Java_基础知识回顾
    Git_期末总结
  • 原文地址:https://www.cnblogs.com/gzbnet/p/8075028.html
Copyright © 2011-2022 走看看