public object Invoke(object o, object value) { if (cache.TryGet(o, value, out var result)) { return(result(o, value)); } CallsiteFunc <object, object, object> f = null; var oType = o == null ? typeof(Object) : o.GetType(); var field = oType.GetField(MemberName); if (field != null) { f = DelegateHelpers.GetSetMemberDelegate(field); } var property = oType.GetProperty(MemberName); if (property != null) { f = DelegateHelpers.GetSetMemberDelegate(property); } if (f != null) { cache.CacheMethod(o, value, f); return(f(o, value)); } throw new ArgumentException($"Could not set member `{MemberName}` on target {o.ToString()}, no such member exists."); }
public T Invoke(object arg0, object arg1) { if (cache.TryGet(arg0, arg1, out var result)) { return((T)result(arg0, arg1)); } var ctor = Dispatch.BindToConstructor(typeof(T), new [] { arg0, arg1 }); if (ctor != null) { var f = DelegateHelpers.GetMethodDelegate02(ctor); cache.CacheMethod(arg0, arg1, f); return((T)f(arg0, arg1)); } throw new ArgumentException($"Could not invoke constructor `{typeof(T)}` with types {arg0.GetType()}, {arg1.GetType()}."); }
public object Invoke(object arg0, object arg1) { if (cache.TryGet(arg0, arg1, out var result)) { return(result(arg0, arg1)); } var method = Dispatch.BindToMethod(BindingFlags.Public | BindingFlags.Instance, Target, MemberName, new [] { arg0, arg1 }); if (method != null) { var f = DelegateHelpers.GetMethodDelegate02(method); cache.CacheMethod(arg0, arg1, f); return(f(arg0, arg1)); } throw new ArgumentException($"Could not invoke static method `{MemberName}` on type {Target} with argument types {arg0.GetType()}, {arg1.GetType()}."); }
public object Invoke(object target, object arg0) { if (cache.TryGet(target, arg0, out var result)) { return(result(target, arg0)); } var method = Dispatch.BindToMethod(BindingFlags.Public | BindingFlags.Instance, target.GetType(), MemberName, new [] { arg0 }); if (method != null) { var f = DelegateHelpers.GetMethodDelegate02(method); cache.CacheMethod(target, arg0, f); return(f(target, arg0)); } throw new ArgumentException($"Could not invoke instance member method `{MemberName}` on target {target.ToString()} ({target.GetType()}) with argument types {arg0.GetType()}."); }