public bool Deactivate(bool deactivateDependencies) { if (!IsActive) { return(true); } //check all successors -> these are the ones which depends on actual plugin if (deactivateDependencies) { //try to activate depend plugins if (Predecessors.Count(elem => !((PluginNode)elem).Deactivate(true)) > 0) { return(false); } } else { //just count active plugins if (Predecessors.Count(elem => ((PluginNode)elem).IsActive) > 0) { return(false); } } PluginInstance.DeactivatePlugin(PluginContext); IsActive = false; Graph.NotifyPlugins(PluginInstance, PluginNotification.Deactivated); PluginInstance.Dispose(); Graph.NotifyPlugins(PluginInstance, PluginNotification.Disposed); PluginInstance = null; PluginContext = null; return(true); }