// adds the plugin public static void AddPlugin(String path) { if (String.Compare(Path.GetFileName(path), "_interface.dll") != 0) // we exclude iface dll { clPlugins clp = new clPlugins(path, false); clp.isValid = false; try { Assembly thisAssembly = Assembly.LoadFile(path); IPluginIface plugin = (IPluginIface)thisAssembly.CreateInstance("coesus.Plugin"); if (plugin != null) { clp.isValid = true; clp.plugin = plugin; plugins.Add(clp); } } catch (Exception e) { // we know this is not a regural .net dll clp.error = ".NET assembly error"; plugins.Add(clp); } } }
public static void FillPlugins(IAppIface app) { String dir = String.Concat( Settings.Server.appDirectory, "\\", Settings.Server.pluginsSubdirectory); if (Directory.Exists(dir)) { String[] filenames = Directory.GetFiles(dir, "*.dll"); foreach (String fname in filenames) { AddPlugin(fname); } // init each foreach (clPlugins clpx in plugins) { if (clpx.isValid) { clpx.plugin.Init(app); // Console.WriteLine(String.Concat("INIT ", clpx.plugin.Name, " ", app.ToString())); } } // passing list of the plugins to each IPluginIface[] pluginIfaces = new IPluginIface[plugins.Count]; for (int i = 0; i < plugins.Count; i++) { if (plugins[i].isValid) { pluginIfaces[i] = (IPluginIface)plugins[i].plugin; } } foreach (clPlugins clpx in plugins) { if (clpx.isValid) { clpx.plugin.AllThePlugins(pluginIfaces); } } } }