public static Plugins GetDadosPlugins(string path) { PluginsAttribute attribute = null; Assembly asm = Assembly.LoadFrom(path); var plg = new Plugins(); foreach (Type type in asm.GetTypes()) { foreach (object obj in type.GetCustomAttributes(false)) { if (obj is PluginsAttribute) { attribute = obj as PluginsAttribute; if (!string.IsNullOrEmpty(attribute.Nome)) { plg.Nome = attribute.Nome; plg.Descrição = attribute.Descricao; plg.Versao = attribute.Versao; break; } } } } return(plg); }
/// <summary> /// 加载插件 /// </summary> /// <returns></returns> public virtual int LoadPlugins() { Plugins.Clear(); PluginInfos.Clear(); if (!Directory.Exists(Environment.CurrentDirectory + @"\Plugins")) { return(0); } string[] _files = Directory.GetFiles(Environment.CurrentDirectory + @"\Plugins"); PluginsAttribute _info = new PluginsAttribute(); foreach (var item in _files) { string _ext = Path.GetExtension(item); if (!_ext.Equals(".dll")) { continue; } try { Assembly _asm = DllAssembly = Assembly.UnsafeLoadFrom(item); Type[] _types = _asm.GetTypes(); foreach (var t in _types) { if (t.GetInterface(m_infaceType.Name) != null) { T _plug = (T)_asm.CreateInstance(t.FullName); Plug = t; Plugins.Add(_plug); // 获得插件信息 _info = t.GetCustomAttribute(typeof(PluginsAttribute), false) as PluginsAttribute; PluginInfos.Add(_info); LoadPluginsInfo(); } } } catch { return(0); } } return(PluginInfos.Count); }