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))); }
public object Invoke(object Target, params object[] args) { var types = ReflectionHelper.ConvertToType(Method.GetParameters()); return(Method.Invoke(Target, ReflectionHelper.GetArgumentByType(args, types))); }