private static void LoadPlugin(PluginInfo pi, IForwardDestinationHandler ifdh) { try { // load if not already loaded if (ifdh == null) { PluginFinder pf = new PluginFinder(); ifdh = pf.Load <IForwardDestinationHandler>(pi, ignoreList); } if (ifdh != null) { // for the 'path' value, we still want to use the userprofile directory no matter where the plugin was loaded from // the reason is that the 'path' is where plugin settings will be saved, so it needs to be user writable and user-specific string path = Path.Combine(userForwarderDirectory, Growl.CoreLibrary.PathUtility.GetSafeFolderName(ifdh.Name)); // check to make sure this plugin was not loaded from another directory already if (!loadedPlugins.ContainsKey(path)) { loadedPlugins.Add(pi.FolderPath, pi); if (!loadedPlugins.ContainsKey(path)) { loadedPlugins.Add(path, pi); // link by the settings path as well so we can detect duplicate plugins in other folders } loadedPluginsList.Add(pi); LoadInternal(ifdh, pi.FolderPath, path); } else { // plugin was not valid Utility.WriteDebugInfo(String.Format("Forwarder not loaded: '{0}' - Duplicate plugin was already loaded from another folder", pi.FolderPath)); } } else { // plugin was not valid Utility.WriteDebugInfo(String.Format("Forwarder not loaded: '{0}' - Does not implement IForwardDestinationHandler interface", pi.FolderPath)); } } catch (Exception ex) { // suppress any per-plugin loading exceptions Utility.WriteDebugInfo(String.Format("Forwarder failed to load: '{0}' - {1} - {2}", pi.FolderPath, ex.Message, ex.StackTrace)); } }
private static void LoadFolder(string folder) { try { if (!loadedPlugins.ContainsKey(folder)) { PluginFinder pf = new PluginFinder(); IForwardDestinationHandler plugin = pf.Search <IForwardDestinationHandler>(folder, CheckType, ignoreList); if (plugin != null) { Type type = plugin.GetType(); PluginInfo pi = new PluginInfo(folder, type); LoadPlugin(pi, plugin); } } } catch (Exception ex) { // suppress any per-plugin loading exceptions Utility.WriteDebugInfo(String.Format("Plugin failed to load: '{0}' - {1} - {2}", folder, ex.Message, ex.StackTrace)); } }