private List <ReactEventInfo> InitEventInfos() { var result = new List <ReactEventInfo>(); foreach (var propertyInfo in ModuleType.GetProperties()) { var eventAttribute = propertyInfo.GetCustomAttribute <ReactEventAttribute>(); if (eventAttribute != null) { var eventInfo = new ReactEventInfo(propertyInfo, eventAttribute); result.Add(eventInfo); } } return(result); }
private Delegate MakeEventDelegate(string eventName, Type memberType, Type eventDataType) { // // (TFrameworkElement view, TEventData eventData) => // { // ReactContext.DispatchEvent(view, eventName, ReactEventHelpers.ArgWriter(eventData)); // }; // ParameterExpression viewParameter = Expression.Parameter(typeof(TFrameworkElement), "view"); ParameterExpression eventDataParameter = Expression.Parameter(eventDataType, "eventData"); MemberExpression thisReactContext = Expression.Property(Expression.Constant(this), "ReactContext"); MethodCallExpression dispatchCall = Expression.Call(thisReactContext, typeof(IReactContext).GetMethod("DispatchEvent"), viewParameter, Expression.Constant(eventName, typeof(string)), Expression.Call(ReactEventInfo.ArgWriterOf(eventDataType), eventDataParameter)); return(Expression.Lambda(memberType, dispatchCall, viewParameter, eventDataParameter).Compile()); }