/// <summary> /// 根据插件类型获取相同类型的所有插件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="models"></param> /// <param name="Type"></param> /// <returns></returns> public static List <T> CreateInstancesByPluginType <T>(this System.Reflection.Assembly[] models, string Type = "") where T : class { if (ListObject == null) { ListObject = new Dictionary <string, object>(); } List <T> lstObject = new List <T>(); foreach (var model in models) { //System.Threading.Tasks.Parallel.ForEach(models, model => //{ var types = model.GetTypesByType(Type); if (types != null && types.Count > 0) { foreach (var type in types) { //System.Threading.Tasks.Parallel.ForEach(types, type => //{ string assemblyPluginId = model.GetAssemblyPluginAttribute().ID; PluginAttribute pluginAttribute = type.GetPluginAttribute(); string pluginId = pluginAttribute.ID; object obj = null; if (ListObject.ContainsKey(assemblyPluginId.ToLower() + pluginId.ToLower())) { obj = ListObject[assemblyPluginId.ToLower() + pluginId.ToLower()]; } if (obj != null) { lstObject.Add(obj as T); } else { obj = type.GetConstructor(new Type[] { }).Invoke(null); //obj = Activator.CreateInstance(type); lstObject.Add(obj as T); if (pluginAttribute.IsSingleInstance) { ListObject.Add(assemblyPluginId.ToLower() + pluginId.ToLower(), obj); } } //}); } } //}); } return(lstObject); }
/// <summary> /// 获取所有插件内插件类插件信息 /// </summary> /// <returns></returns> public static List <PluginAttribute> GetPluginAttributes(this System.Reflection.Assembly model) { List <PluginAttribute> lstObject = new List <PluginAttribute>(); var types = model.GetTypesByType(); if (types != null && types.Count > 0) { System.Threading.Tasks.Parallel.ForEach(types, type => { PluginAttribute pluginAttribute = type.GetPluginAttribute(); if (pluginAttribute != null) { lstObject.Add(pluginAttribute); } }); } return(lstObject); }