/// <summary> /// Loads a plugin of the given class name from the given assembly, and calls Initialize() on it. /// This function does NOT add the plugin to the PluginManager's /// list of plugins. /// </summary> /// <returns>The loaded plugin.</returns> private static IPlugin LoadPlugin(ObjectCreator creator) { try { // Avoid duplicates of plugins of the same type. if (_plugins.Count > 0) { var byTypePlugins = from p in _plugins where p.GetType() == creator.CreatedType select p; if (byTypePlugins.Count() > 0) { LogManager.Instance.Write("{0} already loaded.", creator.GetAssemblyTitle()); return(null); } } // create and start the plugin var plugin = creator.CreateInstance <IPlugin>(); if (plugin == null) { LogManager.Instance.Write("Failed to load plugin: {0}", creator.GetAssemblyTitle()); return(null); } plugin.Initialize(); LogManager.Instance.Write("Loaded plugin: {0}", creator.GetAssemblyTitle()); return(plugin); } catch (Exception ex) { LogManager.Instance.Write(LogManager.BuildExceptionString(ex)); } return(null); }