private void LoadPlugin(Assembly assembly) { try { foreach (Type type in assembly.GetTypes()) { if (type.GetInterface("IProjectPlugin") != null) { IProjectPlugin plugin = (IProjectPlugin)Activator.CreateInstance(type); projectPlugins.Add(plugin); } else if (type.GetInterface("IDiagramPlugin") != null) { IDiagramPlugin plugin = (IDiagramPlugin)Activator.CreateInstance(type); diagramPlugins.Add(plugin); } } } catch (Exception ex) { MessageBox.Show(Strings.GetString("error_could_not_load_plugins", ex.Message)); } }
private void LoadPlugins() { try { string pluginsPath = Path.Combine(Application.StartupPath, "plugins"); if (!Directory.Exists(pluginsPath)) { return; } DirectoryInfo directory = new DirectoryInfo(pluginsPath); foreach (FileInfo file in directory.GetFiles("*.dll")) { Assembly assembly = Assembly.LoadFile(file.FullName); LoadPlugin(assembly); } } catch (Exception ex) { MessageBox.Show(Strings.GetString("error_could_not_load_plugins", ex.Message)); } if (projectPlugins.Count > 0 || diagramPlugins.Count > 0) { mnuPlugins.Visible = true; foreach (IProjectPlugin plugin in projectPlugins) { ToolStripMenuItem menu = new ToolStripMenuItem(); menu.Text = plugin.MenuText; menu.Tag = plugin; menu.Click += new EventHandler(delegate { try { IProjectPlugin taggedPlugin = menu.Tag as IProjectPlugin; if (taggedPlugin != null) { taggedPlugin.Launch(project); } } catch (Exception ex) { MessageBox.Show(ex.Message, Strings.GetString("unknown_error"), MessageBoxButtons.OK, MessageBoxIcon.Error); } }); mnuPlugins.DropDownItems.Add(menu); } foreach (IDiagramPlugin plugin in diagramPlugins) { ToolStripMenuItem menu = new ToolStripMenuItem(); menu.Text = plugin.MenuText; menu.Tag = plugin; menu.Click += new EventHandler(delegate { try { IDiagramPlugin taggedPlugin = menu.Tag as IDiagramPlugin; if (taggedPlugin != null) { taggedPlugin.Launch(diagram); } } catch (Exception ex) { MessageBox.Show(ex.Message, Strings.GetString("unknown_error"), MessageBoxButtons.OK, MessageBoxIcon.Error); } }); mnuPlugins.DropDownItems.Add(menu); } } }