private static void LoadPlugins(PluginManager instance, MainWindow mainWindow) { #region Get the Catalog instance.mError = false; ResolveEventHandler reh = new ResolveEventHandler(instance.currentDomain_AssemblyResolve); try { AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.AssemblyResolve += reh; AggregateCatalog catalog = instance.CreateCatalog(); var container = new CompositionContainer(catalog); container.ComposeParts(instance); } catch (Exception e) { //MessageBox.Show("Error trying to load plugins: \r\n\r\n" + e.ToString(), "Error trying to load plugins"); //instance.TreeViewPlugins = new List<ITreeViewRightClick>(); //instance.PropertyGridRightClickPlugins = new List<IPropertyGridRightClick>(); //instance.NewObjectPlugins = new List<INewObject>(); //instance.OpenVisualStudioPlugins = new List<IOpenVisualStudio>(); //instance.TreeItemSelectPlugins = new List<ITreeItemSelect>(); //instance.NewFilePlugins = new List<INewFile>(); //instance.MenuStripPlugins = new List<IMenuStripPlugin>(); //instance.TopTabPlugins = new List<ITopTab>(); //instance.LeftTabPlugins = new List<ILeftTab>(); //instance.BottomTabPlugins = new List<IBottomTab>(); //instance.RightTabPlugins = new List<IRightTab>(); //instance.CenterTabPlugins = new List<ICenterTab>(); //instance.GluxLoadPlugins = new List<IGluxLoad>(); //instance.NamedObjectsPlugins = new List<INamedObject>(); //instance.CurrentElementPlugins = new List<ICurrentElement>(); //instance.PropertyChangePlugins = new List<IPropertyChange>(); //instance.CodeGeneratorPlugins = new List<ICodeGeneratorPlugin>(); //instance.ContentFileChangePlugins = new List<IContentFileChange>(); //instance.OutputReceiverPlugins = new List<IOutputReceiver>(); string error = "Error loading plugins"; if (e is ReflectionTypeLoadException) { error += "Error is a reflection type load exception\n"; var loaderExceptions = (e as ReflectionTypeLoadException).LoaderExceptions; foreach(var loaderException in loaderExceptions) { error += "\n" + loaderException.ToString(); } } else { error += "\n" + e.Message; if(e.InnerException != null) { error += "\n Inner Exception:\n" + e.InnerException.Message; } } MessageBox.Show(error); instance.Plugins = new List<PluginBase>(); return; } finally { AppDomain.CurrentDomain.AssemblyResolve -= reh; } #endregion #region Start all plugins foreach (PluginBase plugin in instance.Plugins) { // We used to do this all in an assign references method, // but we now do it here so that the Startup function can have // access to these references. if (plugin is MainWindowPlugin) { ((MainWindowPlugin)plugin).MainWindow = mainWindow; } plugin.MenuStrip = mainWindow.MainMenuStrip; StartupPlugin(plugin, instance); } #endregion }
private static bool ShouldProcessPluginManager(PluginCategories pluginCategories, PluginManager pluginManager) { return (pluginManager.mGlobal && (pluginCategories & PluginCategories.Global) == PluginCategories.Global) || (!pluginManager.mGlobal && (pluginCategories & PluginCategories.ProjectSpecific) == PluginCategories.ProjectSpecific); }
//internal static void Initialize() //{ // if (mGlobalInstance == null) // { // mGlobalInstance = new PluginManager(true); // LoadPlugins(mGlobalInstance); // } // if (mProjectInstance != null) // { // foreach (IPlugin plugin in mProjectInstance.mPluginContainers.Keys) // { // ShutDownPlugin(plugin, PluginShutDownReason.GlueShutDown); // } // } // mProjectInstance = new PluginManager(false); // mInstances.Clear(); // mInstances.Add(mGlobalInstance); // mInstances.Add(mProjectInstance); // LoadPlugins(mProjectInstance); //} internal static void StartupPlugin(IPlugin plugin, PluginManager instance) { // See if the plugin already exists - it may implement multiple interfaces if (!instance.mPluginContainers.ContainsKey(plugin)) { PluginContainer pluginContainer = new PluginContainer(plugin); instance.mPluginContainers.Add(plugin, pluginContainer); try { plugin.UniqueId = plugin.GetType().FullName; if (!mPluginSettingsSave.DisabledPlugins.Contains(plugin.UniqueId)) { plugin.StartUp(); } else { pluginContainer.IsEnabled = false; } } catch (Exception e) { #if DEBUG MessageBox.Show("Plugin failed to start up:\n\n" + e.ToString()); #endif pluginContainer.Fail(e, "Plugin failed in StartUp"); } } }