private void LoadPluginTypes(bool showErrors) { lock (_pluginTypesTable) { // reset existing contents _pluginTypesTable.Clear(); PluginLoader pluginLoader = new PluginLoader(typeof(WriterPlugin).Assembly); //register the callbacks for each supported plugin type. foreach (Type pluginType in SupportedPluginTypes) { //subscribe for a callback when a matching implementation type is found. pluginLoader.AddPluginTypeCallback(pluginType, new PluginLoader.PluginLoadedCallback(RegisterPluginImpl)); //create a list to hold discovered plugin implementations. _pluginTypesTable[pluginType] = new ArrayList(); } // load from plugin directory if (PluginDirectory != null && Directory.Exists(PluginDirectory)) { pluginLoader.LoadPluginsFromDirectory(PluginDirectory, showErrors); } // load from plugins specified in the registry LoadPluginsFromRegistryPaths(pluginLoader, showErrors); // load from legacy plugin directory if (PluginDirectoryLegacy != null && Directory.Exists(PluginDirectoryLegacy)) { pluginLoader.LoadPluginsFromDirectory(PluginDirectoryLegacy, showErrors); } } // fire event if (PluginListChanged != null) { PluginListChanged(this, EventArgs.Empty); } }