public void SetRuntimeValue(Activity activity, object value) { if (activity == null) { throw new ArgumentNullException("activity"); } Activity dataSourceObject = Helpers.ParseActivityForBind(activity, this.Name); if (dataSourceObject != null) { MemberInfo memberInfo = GetMemberInfo(dataSourceObject.GetType(), this.Path, null); if (memberInfo != null) { ActivityBind bind = GetMemberValue(dataSourceObject, memberInfo, this.Path, null) as ActivityBind; if (bind != null) { bind.SetRuntimeValue(dataSourceObject, value); } else { MemberBind.SetValue(dataSourceObject, this.Path, value); } } } }
private static object GetMemberValue(object dataSourceObject, MemberInfo memberInfo, string path, Type targetType) { if (((memberInfo is FieldInfo) || (memberInfo is PropertyInfo)) || (memberInfo is EventInfo)) { return(MemberBind.GetValue(memberInfo, dataSourceObject, path)); } if ((targetType == null) || !(memberInfo is MethodInfo)) { throw new InvalidOperationException(SR.GetString("Error_MemberNotFound")); } return(Delegate.CreateDelegate(targetType, dataSourceObject, (MethodInfo)memberInfo)); }
private static ActivityBind GetContextBind(ActivityBind activityBind, Activity activity, out Activity contextActivity) { if (activityBind == null) { throw new ArgumentNullException("activityBind"); } if (activity == null) { throw new ArgumentNullException("activity"); } BindRecursionContext context = new BindRecursionContext(); ActivityBind bind = activityBind; contextActivity = activity; while (bind != null) { Activity activity2 = Helpers.ParseActivityForBind(contextActivity, bind.Name); if (activity2 == null) { return(null); } object dataContext = activity2; MemberInfo memberInfo = GetMemberInfo(dataContext.GetType(), bind.Path, null); if (memberInfo == null) { contextActivity = activity2; return(bind); } if (memberInfo is FieldInfo) { contextActivity = activity2; return(bind); } if ((!(memberInfo is PropertyInfo) || !((memberInfo as PropertyInfo).PropertyType == typeof(ActivityBind))) || (dataContext == null)) { return(null); } object obj3 = MemberBind.GetValue(memberInfo, dataContext, bind.Path); if (!(obj3 is ActivityBind)) { return(null); } if (context.Contains(contextActivity, bind)) { return(null); } context.Add(contextActivity, bind); contextActivity = activity2; bind = obj3 as ActivityBind; } return(bind); }
internal static MemberInfo GetMemberInfo(Type dataSourceType, string path, Type targetType) { MemberInfo memberInfo = MemberBind.GetMemberInfo(dataSourceType, path); if (((targetType == null) || !typeof(Delegate).IsAssignableFrom(targetType)) || ((memberInfo != null) && (memberInfo is EventInfo))) { return(memberInfo); } MethodInfo method = targetType.GetMethod("Invoke"); List <Type> list = new List <Type>(); foreach (ParameterInfo info3 in method.GetParameters()) { list.Add(info3.ParameterType); } return(dataSourceType.GetMethod(path, BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance, null, list.ToArray(), null)); }