private static void ExecuteActionImpl(LambdaExpression lambda) { var call = lambda.Body as MethodCallExpression; if (call == null) { throw new ArgumentException( "Execute action only supports lambda in the form FilterManager.ExecuteAction(() => vm.MyAction()), being MyAction void, IEnumerable<IResult> or IEnumerator<IResult>"); } var targetExp = call.Object as ConstantExpression; if (targetExp == null) { throw new ArgumentException( "Execute action only supports lambda in the form FilterManager.ExecuteAction(() => vm.MyAction()), being 'vm' an object instance"); } var context = new ActionExecutionContext { Method = call.Method, Target = targetExp.Value }; FilterFrameworkCoreCustomization.InvokeAction(context, new object[] { }); }
public static void Hook() { var oldPrepareContext = ActionMessage.PrepareContext; ActionMessage.PrepareContext = context => { oldPrepareContext(context); FilterFrameworkCoreCustomization.PrepareContext(context); }; ActionMessage.InvokeAction = context => { var values = MessageBinder.DetermineParameters(context, context.Method.GetParameters()); FilterFrameworkCoreCustomization.InvokeAction(context, values); }; }