public static InvokerClassInfo GetClassReference(string assemblyName, string className) { if (ClassReferences.ContainsKey(assemblyName) == false) { Assembly assembly; if (AssemblyReferences.ContainsKey(assemblyName) == false) { AssemblyReferences.Add(assemblyName, assembly = Assembly.LoadFrom(assemblyName)); } else assembly = (Assembly) AssemblyReferences[assemblyName]; // Walk through each type in the assembly foreach (Type type in assembly.GetTypes()) { if (type.IsClass) { // doing it this way means that you don't have // to specify the full namespace and class (just the class) if (type.FullName.EndsWith("." + className)) { var ci = new InvokerClassInfo(type, Activator.CreateInstance(type)); ClassReferences.Add(assemblyName, ci); return (ci); } } } throw (new Exception("Could not instantiate class")); } return ((InvokerClassInfo) ClassReferences[assemblyName]); }
public static Object InvokeMethod(InvokerClassInfo ci, string methodName, Object[] args) { // Dynamically Invoke the method object result = ci.Type.InvokeMember(methodName, BindingFlags.Default | BindingFlags.InvokeMethod, null, ci.ClassObject, args); return (result); }