예제 #1
0
        /// <summary>
        /// Gets the region view mapping action.
        /// </summary>
        /// <param name="method">The method.</param>
        /// <param name="attribute">The attribute.</param>
        /// <returns></returns>
        protected static Action <RegionMapping, RegionViewMappingPayload> GetRegionViewMappingAction(
            MethodInfo method, ViewMappingActionAttribute attribute)
        {
            var parameters = method.GetParameters();

            if (parameters.Length < 2)
            {
                return(null);
            }

            var p1 = parameters[0];

            if (p1 == null || p1.ParameterType != typeof(RegionMapping))
            {
                return(null);
            }

            var p2 = parameters[1];

            if (p2 == null || p2.ParameterType != typeof(RegionViewMappingPayload))
            {
                return(null);
            }

            Action <RegionMapping, RegionViewMappingPayload> act =
                (mapping, payload) => InvokeRegionViewMappingAction(method, attribute, mapping, payload);

            return(act);
        }
예제 #2
0
        /// <summary>
        /// Invokes the region view mapping action.
        /// </summary>
        /// <param name="method">The method.</param>
        /// <param name="attribute">The attribute.</param>
        /// <param name="mapping">The mapping.</param>
        /// <param name="payload">The payload.</param>
        protected static void InvokeRegionViewMappingAction(
            MethodInfo method, ViewMappingActionAttribute attribute,
            RegionMapping mapping, RegionViewMappingPayload payload)
        {
            var canProceed = attribute.BeforeAction(method.DeclaringType, method, mapping, payload);

            if (!canProceed)
            {
                return;
            }

            method.Invoke(mapping, new object[] { mapping, payload });

            attribute.AfterAction(method.DeclaringType, method, mapping, payload);
        }