public static Action <TProtocol> CreateDelegate <TProtocol>(object actor, ExpressionSerializationInfo info) { var mi = actor.GetType().GetMethod(info.MethodName, info.ArgumentTypes !); if (mi != null) { var dlg = CreateDelegate(mi, actor); Action <TProtocol> consumer = a => dlg.DynamicInvoke(info.ArgumentValues); return(consumer); } throw new InvalidOperationException($"Cannot Create a delegate method for MethodName={info.MethodName}"); }
public static Action <TProtocol, TParam> CreateDelegate <TProtocol, TParam>(object actor, ExpressionSerializationInfo info) { var mi = actor.GetType().GetMethod(info.MethodName, info.FlattenTypes()); if (mi != null) { var dlg = CreateDelegate(mi, actor); var args = info.ArgumentValues.Where(a => !(a is ParameterExpressionNode)).ToArray(); Action <TProtocol, TParam> consumer = (a, tparam) => dlg.DynamicInvoke(args.Concat(new object?[] { tparam }).ToArray()); return(consumer); } throw new InvalidOperationException($"Cannot Create a delegate method for MethodName={info.MethodName}"); }