示例#1
0
        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);
            };
        }