Example #1
0
        public static DynaClassInfo 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 == true)
                    {
                        // 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))
                        {
                            DynaClassInfo ci = new DynaClassInfo(type,
                                               Activator.CreateInstance(type));
                            ClassReferences.Add(AssemblyName, ci);
                            return (ci);
                        }
                    }
                }
                throw (new System.Exception("could not instantiate class"));
            }
            return ((DynaClassInfo)ClassReferences[AssemblyName]);
        }
Example #2
0
        public static DynaClassInfo GetClassReference(string AssemblyName, string ClassName)
        {
            Assembly assembly;

            if (ClassReferences.ContainsKey(AssemblyName))
            {
                return((DynaClassInfo)ClassReferences[AssemblyName]);
            }
            if (!AssemblyReferences.ContainsKey(AssemblyName))
            {
                AssemblyReferences.Add(AssemblyName, assembly = Assembly.LoadFrom(AssemblyName));
            }
            else
            {
                assembly = (Assembly)AssemblyReferences[AssemblyName];
            }
            foreach (Type type in assembly.GetTypes())
            {
                if (type.IsClass && type.FullName.EndsWith("." + ClassName))
                {
                    DynaClassInfo info = new DynaClassInfo(type, Activator.CreateInstance(type));
                    ClassReferences.Add(AssemblyName, info);
                    return(info);
                }
            }
            throw new Exception("could not instantiate class");
        }
 public static DynaClassInfo GetClassReference(string AssemblyName, string ClassName)
 {
   Assembly assembly;
   if (ClassReferences.ContainsKey(AssemblyName))
   {
     return (DynaClassInfo)ClassReferences[AssemblyName];
   }
   if (!AssemblyReferences.ContainsKey(AssemblyName))
   {
     AssemblyReferences.Add(AssemblyName, assembly = Assembly.LoadFrom(AssemblyName));
   }
   else
   {
     assembly = (Assembly)AssemblyReferences[AssemblyName];
   }
   foreach (Type type in assembly.GetTypes())
   {
     if (type.IsClass && type.FullName.EndsWith("." + ClassName))
     {
       DynaClassInfo info = new DynaClassInfo(type, Activator.CreateInstance(type));
       ClassReferences.Add(AssemblyName, info);
       return info;
     }
   }
   throw new Exception("could not instantiate class");
 }
Example #4
0
        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 == true)
                    {
                        // 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))
                        {
                            DynaClassInfo ci = new DynaClassInfo(type,
                                                                 Activator.CreateInstance(type));
                            ClassReferences.Add(AssemblyName, ci);
                            return(ci);
                        }
                    }
                }
                throw (new System.Exception("could not instantiate class"));
            }
            return((DynaClassInfo)ClassReferences[AssemblyName]);
        }
Example #5
0
        private static T SetProperty <T>(DynaClassInfo ci,
                                         string PropName, T arg)
        {
            // Dynamically Invoke the method
            PropertyInfo pi = ci.type.GetProperty(PropName);

            //Type type = typeof(T);
            Type ptype = pi.PropertyType;

            if (ptype.IsGenericType && ptype.GetGenericArguments().Length > 0 && ptype.GetGenericArguments()[0].IsEnum)
            {
                // Convert Int32 to Enum?
                TypeConverter convertSet = TypeDescriptor.GetConverter(pi.PropertyType);
                pi.SetValue(ci.ClassObject, convertSet.ConvertFrom(arg.ToString() + ""), new Object[] { });

                // Convert Enum? to Int32
                TypeConverter convertGet = TypeDescriptor.GetConverter(typeof(T));
                int           tmp        = (int)(pi.GetValue(ci.ClassObject, new Object[] { }));
                return((T)convertGet.ConvertFrom(tmp.ToString() + ""));
            }
            else
            {
                pi.SetValue(ci.ClassObject, (T)arg, new Object[] { });

                return((T)(pi.GetValue(ci.ClassObject, new Object[] { })));
            }
        }
Example #6
0
        // --- this is the method that you invoke ------------

        public static Object InvokeMethod(string AssemblyName,
                                          string ClassName, string MethodName, Object[] args)
        {
            DynaClassInfo ci = GetClassReference(AssemblyName, ClassName);

            return(InvokeMethod(ci, MethodName, args));
        }
Example #7
0
 public static Object InvokeMethod(DynaClassInfo ci,
                      string MethodName, Object[] args)
 {
     Object Result = ci.type.InvokeMember(MethodName,
       BindingFlags.Default | BindingFlags.InvokeMethod,
            null,
            ci.ClassObject,
            args);
     return (Result);
 }
Example #8
0
        public static Object InvokeMethod(DynaClassInfo ci,
                                          string MethodName, Object[] args)
        {
            Object Result = ci.type.InvokeMember(MethodName,
                                                 BindingFlags.Default | BindingFlags.InvokeMethod,
                                                 null,
                                                 ci.ClassObject,
                                                 args);

            return(Result);
        }
Example #9
0
        private static T CallMethod <T>(DynaClassInfo ci,
                                        string MethodName, Object[] mArgs)
        {
            // Dynamically Invoke the method
            Object Result = ci.type.InvokeMember(MethodName,
                                                 BindingFlags.Default | BindingFlags.InvokeMethod,
                                                 null,
                                                 ci.ClassObject,
                                                 mArgs);

            return((T)Result);
        }
Example #10
0
        GetClassReference(string assemblyFullPath, string className, bool searchWithinCallingAssembly = true)
        {
            string        assemblyClassName = assemblyFullPath + "." + className;
            DynaClassInfo classInfo         = null;
            var           assemblyName      = Path.GetFileNameWithoutExtension(assemblyFullPath);

            if (!ClassReferences.TryGetValue(assemblyClassName, out classInfo))
            {
                Assembly assembly = null;
                if (searchWithinCallingAssembly)
                {
                    var currAssembly = Assembly.GetExecutingAssembly();
                    var currAssemblyExistingClass = getClassInfo(currAssembly, className);
                    if (currAssemblyExistingClass != null)
                    {
                        assembly  = currAssembly;
                        classInfo = currAssemblyExistingClass;
                    }
                    else
                    {
                        try
                        {
                            assembly = Assembly.Load(assemblyName);
                        }
                        catch (FileNotFoundException)
                        {
                        }
                    }
                }
                if (assembly == null)
                {
                    if (AssemblyReferences.ContainsKey(assemblyFullPath) == false)
                    {
                        AssemblyReferences.Add(assemblyFullPath,
                                               assembly = Assembly.LoadFrom(assemblyFullPath));
                    }
                    else
                    {
                        assembly = (Assembly)AssemblyReferences[assemblyFullPath];
                    }
                }

                classInfo = classInfo ?? getClassInfo(assembly, className);
                if (classInfo == null)
                {
                    throw new System.Exception("Could not instantiate class: " + className);
                }

                ClassReferences.Add(assemblyClassName, classInfo);
            }
            return(classInfo);
        }
Example #11
0
        private static DynaClassInfo getClassInfo(Assembly assembly, string className)
        {
            var classNameSuffix = "." + className;

            // Walk through each type in the assembly
            foreach (Type type in assembly.GetTypes())
            {
                if (type.IsClass == true && type.FullName.EndsWith(classNameSuffix))
                {
                    var classInfo = new DynaClassInfo(type, Activator.CreateInstance(type));
                    return(classInfo);
                }
            }
            return(null);
        }
Example #12
0
        public static Object InvokeMethod(string AssemblyName,
                                          string ClassName, string MethodName, Object[] args)
        {
            DynaClassInfo ci = GetClassReference(AssemblyName, ClassName);

            if (ci == null)
            {
                Type type = Type.GetType(AssemblyName + "." + ClassName);
                if (type != null)
                {
                    ci = new DynaClassInfo(type, Activator.CreateInstance(type));
                }
            }
            return(InvokeMethod(ci, MethodName, args));
        }
Example #13
0
        private static T GetProperty <T>(DynaClassInfo ci,
                                         string PropName)
        {
            // Dynamically Get a Property Value
            PropertyInfo pi = ci.type.GetProperty(PropName);

            Object value = pi.GetValue(ci.ClassObject, new Object[] { });

            if (value != null)
            {
                return((T)(value));
            }

            return(default(T));
        }
Example #14
0
        /// <summary>
        /// Preload an Assembly
        /// </summary>
        /// <param name="AssemblyName">The Filename of the Assembly</param>
        /// <param name="ClassName">The Classname to instantiate</param>
        /// <param name="cArgs">Constructor Parameters (or null)</param>
        /// <returns>true if succeeeded</returns>
        public static Boolean PreLoadAssembly(string AssemblyName, string ClassName, Object[] cArgs = null)
        {
            if (ClassReferences.ContainsKey(AssemblyName) == false)
            {
                Assembly assembly;
                if (AssemblyReferences.ContainsKey(AssemblyName) == false)
                {
                    AssemblyReferences.Add(AssemblyName,
                                           assembly = Assembly.LoadFrom(AssemblyName));
                }
                else
                {
                    assembly = AssemblyReferences[AssemblyName];
                }

                // Walk through each type in the assembly
                foreach (Type type in assembly.GetTypes())
                {
                    if (type.IsClass == true)
                    {
                        // 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))
                        {
                            try
                            {
                                DynaClassInfo ci = new DynaClassInfo(type,
                                                                     Activator.CreateInstance(type, cArgs));
                                ClassReferences.Add(AssemblyName, ci);
                            }
                            catch (Exception e)
                            {
                                Debug.WriteLine(e.Message);
                            }
                        }
                    }
                }
            }

            return(ClassReferences.ContainsKey(AssemblyName));
        }
Example #15
0
        GetClassReference(string AssemblyName, string ClassName)
        {
            if (ClassReferences.ContainsKey(AssemblyName) == false)
            {
                Assembly assembly;
                if (AssemblyReferences.ContainsKey(AssemblyName) == false)
                {
                    try
                    {
                        AssemblyReferences.Add(AssemblyName,
                                               assembly = Assembly.LoadFrom(AssemblyName));
                    }
                    catch
                    {
                        return(null);
                    }
                }
                else
                {
                    assembly = (Assembly)AssemblyReferences[AssemblyName];
                }

                foreach (Type type in assembly.GetTypes())
                {
                    if (type.IsClass == true)
                    {
                        if (type.FullName.EndsWith("." + ClassName))
                        {
                            DynaClassInfo ci = new DynaClassInfo(type,
                                                                 Activator.CreateInstance(type));
                            ClassReferences.Add(AssemblyName, ci);
                            return(ci);
                        }
                    }
                }
            }
            return((DynaClassInfo)ClassReferences[AssemblyName]);
        }
Example #16
0
        public static DynaClassInfo GetClassReference(string AssemblyName, string ClassName)
        {
            if (ClassReferences.ContainsKey(AssemblyName) == false)
            {
                Assembly assembly;
                if (AssemblyReferences.ContainsKey(AssemblyName) == false)
                {
                    try
                    {
                        AssemblyReferences.Add(AssemblyName,
                              assembly = Assembly.LoadFrom(AssemblyName));
                    }
                    catch
                    {
                        return null;
                    }
                }
                else
                    assembly = (Assembly)AssemblyReferences[AssemblyName];

                foreach (Type type in assembly.GetTypes())
                {
                    if (type.IsClass == true)
                    {
                        if (type.FullName.EndsWith("." + ClassName))
                        {
                            DynaClassInfo ci = new DynaClassInfo(type,
                                               Activator.CreateInstance(type));
                            ClassReferences.Add(AssemblyName, ci);
                            return (ci);
                        }
                    }
                }
            }
            return ((DynaClassInfo)ClassReferences[AssemblyName]);
        }
Example #17
0
 public static object InvokeMethod(DynaClassInfo ci, string MethodName, object[] args)
 {
     return(ci.type.InvokeMember(MethodName, BindingFlags.InvokeMethod, null, ci.ClassObject, args));
 }
Example #18
0
        // --- these is the method that you invoke ------------

        /// <summary>
        /// Call a Generic typed Method on an (cached) Assembly.
        /// </summary>
        /// <typeparam name="T">The return Type</typeparam>
        /// <param name="AssemblyName">The Filename of the Assembly</param>
        /// <param name="ClassName">The Classname to instantiate</param>
        /// <param name="MethodName">The Method name to invoke</param>
        /// <param name="mArgs">Method Parameters</param>
        /// <param name="cArgs">Constructor Parameters (or null)</param>
        /// <returns>The method result if any</returns>
        public static T CallMethod <T>(String AssemblyName, String ClassName, String MethodName, Object[] mArgs, Object[] cArgs = null)
        {
            DynaClassInfo ci = GetClassReference(AssemblyName, ClassName, cArgs);

            return(CallMethod <T>(ci, MethodName, mArgs));
        }
Example #19
0
        /// <summary>
        /// Call a Method on an (cached) Assembly.
        /// </summary>
        /// <param name="AssemblyName">The Filename of the Assembly</param>
        /// <param name="ClassName">The Classname to instantiate</param>
        /// <param name="MethodName">The Method name to invoke</param>
        /// <param name="mArgs">Method Parameters</param>
        /// <param name="cArgs">Constructor Parameters (or null)</param>
        public static void CallMethod(String AssemblyName, String ClassName, String MethodName, Object[] mArgs, Object[] cArgs = null)
        {
            DynaClassInfo ci = GetClassReference(AssemblyName, ClassName, cArgs);

            CallMethod <Object>(ci, MethodName, mArgs);
        }
Example #20
0
        /// <summary>
        /// Return a Property value of an (cached) Assembly.
        /// </summary>
        /// <typeparam name="T">The Property Type</typeparam>
        /// <param name="AssemblyName">The Filename of the Assembly</param>
        /// <param name="ClassName">The Classname to instantiate</param>
        /// <param name="PropName">The Property to set</param>
        /// <param name="cArgs">Constructor Parameters (or null)</param>
        /// <returns>The Property Value</returns>
        public static T GetProperty <T>(String AssemblyName, String ClassName, String PropName, Object[] cArgs = null)
        {
            DynaClassInfo ci = GetClassReference(AssemblyName, ClassName, cArgs);

            return(GetProperty <T>(ci, PropName));
        }
Example #21
0
 public static Object InvokeMethod(string AssemblyName,
        string ClassName, string MethodName, Object[] args)
 {
     DynaClassInfo ci = GetClassReference(AssemblyName, ClassName);
     if (ci == null)
     {
         Type type = Type.GetType(AssemblyName + "." + ClassName);
         if (type != null)
             ci = new DynaClassInfo(type, Activator.CreateInstance(type));
     }
     return (InvokeMethod(ci, MethodName, args));
 }
Example #22
0
 public static object InvokeMethod(DynaClassInfo ci, string MethodName, object[] args)
 {
   return ci.type.InvokeMember(MethodName, BindingFlags.InvokeMethod, null, ci.ClassObject, args);
 }