自定义工厂类

  1 using System;
  2 using System.Collections;
  3 using System.Collections.Generic;
  4 using System.Linq;
  5 using System.Reflection;
  6 using System.Text;
  7 namespace LYZB.ApiConfig
  8 {
  9     /// <summary>
 10     /// 自定义工厂类
 11     /// </summary>
 12     /// <typeparam name="T">泛型</typeparam>
 13     public abstract class AssesUtil<T> where T : class,new()
 14     {
 15         /// <summary>
 16         /// 缓存集合
 17         /// </summary>
 18         private static Hashtable hash = Hashtable.Synchronized(new Hashtable());
 19         /// <summary>
 20         /// 执行实例方法
 21         /// </summary>
 22         /// <param name="FunName">方法名</param>
 23         /// <param name="type">参数类型</param>
 24         /// <param name="arg">参数实体</param>
 25         /// <returns></returns>
 26         public static object Invoke(string FunName, Type[] type, params object[] arg)
 27         {
 28             object result = null;
 29             try
 30             {
 31                 Type types = typeof(T);
 32                 var classname = types.Namespace + "." + types.Name;
 33                 MethodInfo method = types.GetMethod(FunName, type);
 34                 if (hash[classname] != null)
 35                 {
 36                     result = method.Invoke(hash[classname], arg);
 37                 }
 38                 else
 39                 {
 40                     var func = Activator.CreateInstance(types);
 41                     result = method.Invoke(func, arg);
 42                     hash[classname] = func;
 43                 }
 44             }
 45             catch (Exception e)
 46             {
 47                 throw e;
 48             }
 49             return result;
 50         }
 51         /// <summary>
 52         /// 高并发执行方法
 53         /// </summary>
 54         /// <param name="FunName">方法名</param>
 55         /// <param name="type">参数类型</param>
 56         /// <param name="arg">参数</param>
 57         /// <returns>OBJECT</returns>
 58         public static object InvokeConcurrent(string FunName, Type[] type, params object[] arg)
 59         {
 60             object result = null;
 61             Type types = typeof(T);
 62             String Key = types.Namespace + "." + types.Name + "." + FunName;
 63             String parm_key = "";
 64             try
 65             {
 66                 for (int i = 0; i < type.Length; i++)
 67                 {
 68                     parm_key += type[i].Name + "_" + arg[i] + "_";
 69                 }
 70                 Key = Key +":"+ parm_key.TrimEnd('_');
 71                 //二级缓存处理
 72                 if (Cache.GetData(Key) != null)
 73                 {
 74                     result = Cache.GetData(Key);
 75                 }
 76                 else
 77                 {
 78                     Object Odata = Invoke(FunName, type, arg);
 79                     if (Odata != null)
 80                     {
 81                         Cache.Add(Key, Odata, TimeSpan.FromSeconds(1));
 82                     }
 83                     result = Odata;
 84                 }
 85             }
 86             catch (Exception ex)
 87             {
 88                 throw ex;
 89             }
 90             return result;
 91         }
 92         /// <summary>
 93         /// 获取单个类实列
 94         /// </summary>
 95         /// <returns></returns>
 96         public static T GetInstance()
 97         {
 98             T result = default(T);
 99             try
100             {
101                 //获得泛型类的对象类型
102                 Type type = typeof(T);
103                 var classname = type.Namespace + "." + type.Name;
104                 if (hash[classname] != null)
105                 {
106                     result = hash[classname] as T;
107                 }
108                 else
109                 {   //根据对象的类型创建对象的实例
110                     result = Activator.CreateInstance(type) as T;
111                     hash[classname] = result;
112                 }
113             }
114             catch (Exception error)
115             {
116                 throw error;
117             }
118             return result;
119         }
120     }
121 }

posted @ 2019-10-17 20:50  苍云者  阅读(464)  评论(0编辑  收藏  举报