public void LoadPlugins() { Console.WriteLine("Loading plugins..."); Console.WriteLine(); var pluginFiles = Directory.GetFiles(PluginFolder); var pluginTypes = new List <Type>(); for (int i = 0; i < pluginFiles.Length; i++) { try { if (Path.GetExtension(pluginFiles[i]) != ".dll") { continue; } Console.WriteLine("Loading {0}...", pluginFiles[i]); var assembly = Assembly.LoadFrom(pluginFiles[i]); var types = assembly.GetExportedTypes(); for (int j = 0; j < types.Length; j++) { if (m_PluginType.IsAssignableFrom(types[j]) && !types[j].IsAbstract) { var plugin = Activator.CreateInstance(types[j]) as Plugin; Console.WriteLine("\tLoading {0}...", plugin.GetType().Name); Console.WriteLine("\t\tName: {0}\n\t\tDescription: {1}\n\t\tAuthor: {2}", plugin.Name, plugin.Description, plugin.Author); plugin.Client = m_Client; LoadedPlugins.Add(plugin); } } Console.WriteLine(); LoadedPluginAssemblies.Add(assembly); } catch (PluginException) { //TODO: Add logs. //TODO: Remove plugin if the plugin was loaded. Console.WriteLine("Error in plugin {0} constructor", pluginFiles[i]); } catch (Exception ex) { Console.WriteLine("Error while loading {0}: \n\t{1}", pluginFiles[i], ex.Message); } } for (int i = 0; i < LoadedPlugins.Count; i++) { var pluginTasks = new PluginTasks(LoadedPlugins[i]); m_PluginTasks.Add(pluginTasks); pluginTasks.DoLoad(); } }
public void LoadPlugins() { Console.WriteLine("Loading plugins..."); Console.WriteLine(); var pluginFiles = Directory.GetFiles(PluginFolder); var pluginTypes = new List<Type>(); for (int i = 0; i < pluginFiles.Length; i++) { try { if (Path.GetExtension(pluginFiles[i]) != ".dll") continue; Console.WriteLine("Loading {0}...", pluginFiles[i]); var assembly = Assembly.LoadFrom(pluginFiles[i]); var types = assembly.GetExportedTypes(); for (int j = 0; j < types.Length; j++) { if (m_PluginType.IsAssignableFrom(types[j]) && !types[j].IsAbstract) { var plugin = Activator.CreateInstance(types[j]) as Plugin; Console.WriteLine("\tLoading {0}...", plugin.GetType().Name); Console.WriteLine("\t\tName: {0}\n\t\tDescription: {1}\n\t\tAuthor: {2}", plugin.Name, plugin.Description, plugin.Author); plugin.Client = m_Client; LoadedPlugins.Add(plugin); } } Console.WriteLine(); LoadedPluginAssemblies.Add(assembly); } catch (PluginException) { //TODO: Add logs. //TODO: Remove plugin if the plugin was loaded. Console.WriteLine("Error in plugin {0} constructor", pluginFiles[i]); } catch (Exception ex) { Console.WriteLine("Error while loading {0}: \n\t{1}", pluginFiles[i], ex.Message); } } for (int i = 0; i < LoadedPlugins.Count; i++) { var pluginTasks = new PluginTasks(LoadedPlugins[i]); m_PluginTasks.Add(pluginTasks); pluginTasks.DoLoad(); } }