예제 #1
0
 public void AddRange(PluginCollection value)
 {
     for (int i = 0; i < value.Capacity; i++)
     {
         this.Add((IPlugin)value.List[i]);
     }
 }
예제 #2
0
        /// <summary>
        /// 获取插件对象
        /// </summary>
        /// <returns></returns>
        public PluginCollection GetPluginFromDLL()
        {
            //插件接口容器
            PluginCollection PluginCol = new PluginCollection();

            //检查插件文件夹是否存在
            if (!Directory.Exists(_pluginFolder))
            {
                Directory.CreateDirectory(_pluginFolder);
            }
            //获取DLL
            string[] dllFiles = Directory.GetFiles(_pluginFolder, "*.dll");
            foreach (string file in dllFiles)
            {
                Assembly assembly = Assembly.LoadFrom(file);
                if (assembly != null)
                {
                    Type[] types = null;
                    try
                    {
                        types = assembly.GetTypes();
                    }
                    catch (Exception ex)
                    {
                        DataBase.Log.LogManager.WriteSysLog(ex, string.Format("Function Name:PluginParse.GetPluginFromDLL"));
                    }
                    if (types == null)
                    {
                        continue;
                    }
                    foreach (Type type in types)
                    {
                        Type[] interfaces = type.GetInterfaces();
                        foreach (Type ainterface in interfaces)
                        {
                            switch (ainterface.FullName)
                            {
                            case "Fan.Plugin.Interface.ICommandRef":
                            case "Fan.Plugin.Interface.IToolRef":
                            case "Fan.Plugin.Interface.IMenuRef":
                            case "Fan.Plugin.Interface.IToolBarRef":
                            case "Fan.Plugin.Interface.IDockableWindowRef":
                            case "Fan.Plugin.Interface.IControlRef":
                                GetPluginObject(PluginCol, type);
                                break;

                            default:
                                break;
                            }
                        }
                    }
                }
            }
            return(PluginCol);
        }
예제 #3
0
 public ParsePluginCol(PluginCollection pluginCol)
 {
     m_AllPlugin.ArraylstCommandCategory = new ArrayList();
     m_AllPlugin.dicCommands             = new Dictionary <string, ICommandRef>();
     m_AllPlugin.dicControls             = new Dictionary <string, IControlRef>();
     m_AllPlugin.dicDockableWindows      = new Dictionary <string, IDockableWindowRef>();
     m_AllPlugin.dicMenus    = new Dictionary <string, IMenuRef>();
     m_AllPlugin.dicPlugins  = new Dictionary <string, IPlugin>();
     m_AllPlugin.dicToolBars = new Dictionary <string, IToolBarRef>();
     m_AllPlugin.dicTools    = new Dictionary <string, IToolRef>();
     GetPluginArray(pluginCol);
 }
예제 #4
0
        /// <summary>
        /// 通过反射的方式获取对象
        /// </summary>
        /// <param name="PluginCol"></param>
        /// <param name="type"></param>
        private void GetPluginObject(PluginCollection PluginCol, Type type)
        {
            IPlugin plugin = null;

            try
            {
                plugin = Activator.CreateInstance(type) as IPlugin;
                if (plugin != null)
                {
                    if (!PluginCol.Contains(plugin))
                    {
                        PluginCol.Add(plugin);
                    }
                    else
                    {
                        DataBase.Log.LogManager.WriteSysInfo(string.Format("Plugin:{0} has been Loaded", plugin.Name));
                    }
                }
            }
            catch (Exception ex)
            {
                DataBase.Log.LogManager.WriteSysLog(ex, string.Format("Function Name:PluginParse.GetPluginObject"));
            }
        }
예제 #5
0
 public PluginCollection(PluginCollection value)
 {
     this.AddRange(value);
 }
예제 #6
0
        private void GetPluginArray(PluginCollection pluginCol)
        {
            if (pluginCol == null)
            {
                return;
            }
            foreach (IPlugin plugin in pluginCol)
            {
                try
                {
                    if (!m_AllPlugin.dicPlugins.ContainsKey(plugin.Name))
                    {
                        m_AllPlugin.dicPlugins.Add(plugin.Name, plugin);
                    }
                    ICommandRef cmd = plugin as ICommandRef;
                    if (cmd != null)
                    {
                        if (!m_AllPlugin.dicCommands.ContainsKey(cmd.ToString()))
                        {
                            m_AllPlugin.dicCommands.Add(cmd.Name, cmd);
                        }

                        if (cmd.Category != null)
                        {
                            if (!m_AllPlugin.ArraylstCommandCategory.Contains(cmd.Category))
                            {
                                m_AllPlugin.ArraylstCommandCategory.Add(cmd.Category);
                            }
                        }
                    }
                    IToolRef atool = plugin as IToolRef;
                    if (atool != null)
                    {
                        if (!m_AllPlugin.dicTools.ContainsKey(atool.Name))
                        {
                            m_AllPlugin.dicTools.Add(atool.Name, atool);
                        }

                        if (atool.Category != null)
                        {
                            if (!m_AllPlugin.ArraylstCommandCategory.Contains(atool.Category))
                            {
                                m_AllPlugin.ArraylstCommandCategory.Add(atool.Category);
                            }
                        }
                    }
                    IMenuRef aMenu = plugin as IMenuRef;
                    if (aMenu != null)
                    {
                        if (!m_AllPlugin.dicMenus.ContainsKey(aMenu.Name))
                        {
                            m_AllPlugin.dicMenus.Add(aMenu.Name, aMenu);
                        }
                    }
                    IToolBarRef aToolBar = plugin as IToolBarRef;
                    if (aToolBar != null)
                    {
                        if (!m_AllPlugin.dicToolBars.ContainsKey(aToolBar.Name))
                        {
                            m_AllPlugin.dicToolBars.Add(aToolBar.Name, aToolBar);
                        }
                    }
                    IDockableWindowRef aDockableWindow = plugin as IDockableWindowRef;
                    if (aDockableWindow != null)
                    {
                        if (!m_AllPlugin.dicDockableWindows.ContainsKey(aDockableWindow.Name))
                        {
                            m_AllPlugin.dicDockableWindows.Add(aDockableWindow.Name, aDockableWindow);
                        }
                    }
                    IControlRef aControl = plugin as IControlRef;
                    if (aControl != null)
                    {
                        if (!m_AllPlugin.dicControls.ContainsKey(aControl.Name))
                        {
                            m_AllPlugin.dicControls.Add(aControl.Name, aControl);
                        }
                    }
                }
                catch (Exception err)
                {
                    DataBase.Log.LogManager.WriteSysLog(err, string.Format("Function Name:ParsePluginCol.GetPluginArray"));
                }
            }
        }
예제 #7
0
 public PluginCollectionEnumerator(PluginCollection PluginCollection)
 {
     temp       = (IEnumerable)PluginCollection;
     enumerator = temp.GetEnumerator();
 }