private static Action <object, object> CreateAddHandler(EventInfo eventInfo, IDelegateCreatorHelper helper)
        {
            var methodInfo = eventInfo.GetAddMethod();

            if (methodInfo == null)
            {
                return(null);
            }

            Debug.Assert(methodInfo.IsPublic);


            return(helper.CreateAddOrRemoveHandler(methodInfo));
        }
        private static Func <object, object> CreateGetter(PropertyInfo propertyInfo, IDelegateCreatorHelper helper)
        {
            if (!propertyInfo.CanRead)
            {
                return(null);
            }

            var methodInfo = propertyInfo.GetGetMethod();

            if (methodInfo == null)
            {
                return(null);
            }

            Debug.Assert(methodInfo.IsPublic);


            return(helper.CreateGetter(methodInfo));
        }
        private static Action <object> CreateResetter(Type componentType, PropertyInfo propertyInfo, IDelegateCreatorHelper helper)
        {
            MethodInfo methodInfo;

            try
            {
                methodInfo = componentType.GetMethod(string.Format(CultureInfo.InvariantCulture, "Reset{0}", propertyInfo.Name), BindingFlags.Public | BindingFlags.Instance, null, Type.EmptyTypes, null);
                if ((methodInfo == null) || methodInfo.IsGenericMethod)
                {
                    return(null);
                }
            }
            catch (AmbiguousMatchException)
            {
                return(null);
            }

            Debug.Assert(methodInfo.IsPublic);


            return(helper.CreateResetter(methodInfo));
        }