private void init(ConstructorInfo constructor)
        {
            if (constructor == null)
            {
                throw new ArgumentException("Argument: constructor is null");
            }
            if (!constructor.IsPublic)
            {
                var types = ReflectionHelper.ConvertToType(constructor.GetParameters());
                Constructor = arguments => constructor.Invoke(ReflectionHelper.GetArgumentByType(arguments, types));
                return;
            }

            DynamicMethod method = new DynamicMethod(ReflectionHelper.GetMemberSignName(constructor), ReflectionHelper.ObjectType, new Type[] { ReflectionHelper.ObjArrayType });

            var il   = method.GetILGenerator();
            var args = constructor.GetParameters();

            if (args != null)
            {
                for (byte i = 0; i < args.Length; i++)
                {
                    ReflectionHelper.ILLdarg(il, 0);
                    ReflectionHelper.ILLdelem(il, i, ReflectionHelper.ObjectType);
                    ReflectionHelper.ILCastclass(il, ReflectionHelper.ObjectType, args[i].ParameterType);
                }
            }
            il.Emit(OpCodes.Newobj, constructor);
            ReflectionHelper.ILCastclass(il, constructor.DeclaringType, ReflectionHelper.ObjectType);
            il.Emit(OpCodes.Ret);

            Constructor = (Func <object[], object>)method.CreateDelegate(typeof(Func <object[], object>));
        }
        public object Invoke(params object[] args)
        {
            var types = ReflectionHelper.ConvertToType(Constructor.GetParameters());

            return(Constructor.Invoke(ReflectionHelper.GetArgumentByType(args, types)));
        }
Example #3
0
        public object Invoke(object Target, params object[] args)
        {
            var types = ReflectionHelper.ConvertToType(Method.GetParameters());

            return(Method.Invoke(Target, ReflectionHelper.GetArgumentByType(args, types)));
        }