예제 #1
0
        public bool BeforeExecute(IRoutedMessage message, IInteractionNode handlingNode, object[] parameters)
        {
            var methodName = message.As<ActionMessage>().MethodName;

            var questionPresenter = ServiceLocator.Current.GetInstance<IQuestionPresenter>();
            var param = parameters.Add(questionPresenter).ToArray();
            var target = handlingNode.MessageHandler.Unwrap();
            var targetParams = target.GetType().GetMethod(methodName).GetParameters();

            //Prepare
            if (_prepareMethod.IsNotNull())
            {
                var prepareParams = InvocationExtension.GetArguments(param, targetParams, _prepareMethod.Info.GetParameters());

                var prepareResult = _prepareMethod.Invoke(target, prepareParams);
                if (prepareResult != null)
                {
                    if (prepareResult is bool)
                        return (bool) prepareResult;
                }
            }

            //Show
            ServiceLocator.Current.GetInstance<IWindowManager>().ShowDialog(questionPresenter);

            //Callback
            if (_callbackMethod.IsNull())
                return questionPresenter.Answer == Answer.Yes;

            var callbackParams = InvocationExtension.GetArguments(param, targetParams, _callbackMethod.Info.GetParameters());
            var result = _callbackMethod.Invoke(target, callbackParams);

            if (_callbackMethod.Info.ReturnType == typeof(bool)) return (bool)result;
            return true;
        }
예제 #2
0
        private object[] GetParameters(IRoutedMessage message, IInteractionNode handlingNode, Exception exception)
        {
            var target           = handlingNode.MessageHandler.Unwrap();
            var callParameters   = target.GetType().GetMethod(message.As <ActionMessage>().MethodName, BindingFlags.Instance | BindingFlags.Public).GetParameters();
            var rescueParameters = _method.Info.GetParameters();

            return(InvocationExtension.GetArguments(PrepareParameters(message.Parameters, exception), callParameters, rescueParameters));
        }
예제 #3
0
        public bool BeforeExecute(IRoutedMessage message, IInteractionNode handlingNode, object[] parameters)
        {
            var methodName = message.As <ActionMessage>().MethodName;

            var questionPresenter = ServiceLocator.Current.GetInstance <IQuestionPresenter>();
            var param             = parameters.Add(questionPresenter).ToArray();
            var target            = handlingNode.MessageHandler.Unwrap();
            var targetParams      = target.GetType().GetMethod(methodName).GetParameters();

            //Prepare
            if (_prepareMethod.IsNotNull())
            {
                var prepareParams = InvocationExtension.GetArguments(param, targetParams, _prepareMethod.Info.GetParameters());

                var prepareResult = _prepareMethod.Invoke(target, prepareParams);
                if (prepareResult != null)
                {
                    if (prepareResult is bool)
                    {
                        return((bool)prepareResult);
                    }
                }
            }

            //Show
            ServiceLocator.Current.GetInstance <IWindowManager>().ShowDialog(questionPresenter);

            //Callback
            if (_callbackMethod.IsNull())
            {
                return(questionPresenter.Answer == Answer.Yes);
            }

            var callbackParams = InvocationExtension.GetArguments(param, targetParams, _callbackMethod.Info.GetParameters());
            var result         = _callbackMethod.Invoke(target, callbackParams);

            if (_callbackMethod.Info.ReturnType == typeof(bool))
            {
                return((bool)result);
            }
            return(true);
        }
예제 #4
0
 private object[] GetParameters(IRoutedMessage message, IInteractionNode handlingNode, Exception exception)
 {
     var target = handlingNode.MessageHandler.Unwrap();
     var callParameters = target.GetType().GetMethod(message.As<ActionMessage>().MethodName, BindingFlags.Instance | BindingFlags.Public).GetParameters();
     var rescueParameters = _method.Info.GetParameters();
     return InvocationExtension.GetArguments(PrepareParameters(message.Parameters, exception), callParameters, rescueParameters);
 }