/// <summary> /// Invoke a module method /// </summary> /// <param name="module_name"> /// A <see cref="System.String"/> /// </param> /// <param name="method"> /// A <see cref="System.String"/> /// </param> /// <param name="list"> /// A <see cref="System.Object[]"/> /// </param> /// <returns> /// A <see cref="System.Object"/> /// </returns> public static object callMethod(string module_name, string method, params object[] list) { SBIModule mod = SBModule.getModule(module_name); Type mod_type = mod.GetType(); return(mod_type.GetMethod(method).Invoke(mod, list)); }
/// <summary> /// Loads the modules. /// </summary> /// <returns>The modules.</returns> /// <param name="path">Path where modules assemblies are installed.</param> /// <param name="prefix">Module main class Prefix.</param> public static string[] loadModules(string path, string prefix) { SBModule.available_modules = new Hashtable(); SBModule.assemblies = new Hashtable(); if (!Directory.Exists(path)) { throw new Exception("Modules folder does not exists"); } //get available modules string[] modules = Directory.GetFiles(path, prefix + "*.dll"); foreach (string module in modules) { try { //Console.WriteLine("Module => {0}", module); string[] stack = module.Split(Path.DirectorySeparatorChar); string module_name = stack[stack.Length - 1]; module_name = module_name.Substring(0, module_name.Length - 4); //check prefix //Assembly ass = Assembly.Load(module_name); Assembly ass = Assembly.LoadFrom(module); //AppDomain.CurrentDomain.Load(ass.GetName()); if (ass != null) { string module_class = String.Format("{0}.{1}", SBModule.name_space_modules, module_name); Console.WriteLine("Module loaded: " + module_name); Console.WriteLine("Module class: " + module_class); Type ObjType = ass.GetType(module_class); //Type ObjType = ass.GetType(String.Format("{0}.{1}", SMModule.name_space_modules, "SMIModule")); if (ObjType != null) { //Console.WriteLine("Module Type: " + ObjType.ToString()); SBIModule the_module = (SBIModule)Activator.CreateInstance(ObjType); SBModule.available_modules.Add(the_module.Key, the_module); SBModule.assemblies.Add(the_module.Key, ass); } } } catch (Exception ex) { Console.WriteLine("Error loading module"); Console.WriteLine(ex.Message); } } return(modules); }
public static void attachModule(string name, SBIModule module) { SBModule.available_modules.Add(name, module); module.loadModule(); }