public void Unregister(IProxyMemberInfo memberInfo) { if (!memberInfo.DeclaringType.Equals(type)) { throw new ArgumentException(); } string name = memberInfo.Name; if (memberInfo is IProxyPropertyInfo) { this.properties.Remove(name); } else if (memberInfo is IProxyMethodInfo) { this.RemoveMethodInfo((IProxyMethodInfo)memberInfo); } else if (memberInfo is IProxyFieldInfo) { this.fields.Remove(name); } else if (memberInfo is IProxyEventInfo) { this.events.Remove(name); } else if (memberInfo is IProxyItemInfo) { if (this.itemInfo == memberInfo) { this.itemInfo = null; } } }
public IProxyMemberInfo GetMember(string name, BindingFlags flags) { if (name.Equals("Item") && typeof(ICollection).IsAssignableFrom(type)) { return(GetItem()); } IProxyMemberInfo info = GetProperty(name, flags); if (info != null) { return(info); } info = GetMethod(name, flags); if (info != null) { return(info); } info = GetField(name, flags); if (info != null) { return(info); } info = GetEvent(name); if (info != null) { return(info); } return(null); }
public void Unregister(IProxyMemberInfo proxyMemberInfo) { if (proxyMemberInfo == null) { return; } ProxyType proxyType = this.GetType(proxyMemberInfo.DeclaringType); proxyType.Unregister(proxyMemberInfo); }
public ITargetProxy CreateProxy(object target, BindingDescription description) { IProxyType type = target.GetType().AsProxy(); IProxyMemberInfo memberInfo = type.GetMember(description.TargetName); if (memberInfo == null) { memberInfo = type.GetMember(description.TargetName, BindingFlags.Instance | BindingFlags.NonPublic); } if (memberInfo == null) { throw new MissingMemberException(type.Type.FullName, description.TargetName); } EventListener updateTrigger = null; if (!string.IsNullOrEmpty(description.UpdateTrigger)) { IProxyPropertyInfo updateTriggerPropertyInfo = type.GetProperty(description.UpdateTrigger); IProxyFieldInfo updateTriggerFieldInfo = updateTriggerPropertyInfo == null?type.GetField(description.UpdateTrigger) : null; if (updateTriggerPropertyInfo != null) { updateTrigger = updateTriggerPropertyInfo.GetValue(target) as EventListener; } if (updateTriggerFieldInfo != null) { updateTrigger = updateTriggerFieldInfo.GetValue(target) as EventListener; } if (updateTriggerPropertyInfo == null && updateTriggerFieldInfo == null) { throw new MissingMemberException(type.Type.FullName, description.UpdateTrigger); } //Other Property Type if (updateTrigger == null) /* by UniversalTargetProxyFactory */ { return(null); } } var propertyInfo = memberInfo as IProxyPropertyInfo; if (propertyInfo != null) { if (typeof(IObservableProperty).IsAssignableFrom(propertyInfo.ValueType)) { return(null); } if (typeof(EventListener).IsAssignableFrom(propertyInfo.ValueType)) { //Event Type object listener = propertyInfo.GetValue(target); if (listener == null) { throw new NullReferenceException(propertyInfo.Name); } return(new FairyEventProxy(target, (EventListener)listener)); } //Other Property Type if (updateTrigger == null)/* by UniversalTargetProxyFactory */ { return(null); } return(new FairyPropertyProxy(target, propertyInfo, updateTrigger)); } var fieldInfo = memberInfo as IProxyFieldInfo; if (fieldInfo != null) { if (typeof(IObservableProperty).IsAssignableFrom(fieldInfo.ValueType)) { return(null); } if (typeof(EventListener).IsAssignableFrom(fieldInfo.ValueType)) { //Event Type object listener = fieldInfo.GetValue(target); if (listener == null) { throw new NullReferenceException(fieldInfo.Name); } return(new FairyEventProxy(target, (EventListener)listener)); } //Other Property Type if (updateTrigger == null)/* by UniversalTargetProxyFactory */ { return(null); } return(new FairyFieldProxy(target, fieldInfo, updateTrigger)); } return(null); }
//private static readonly ILog log = LogManager.GetLogger(typeof(UnityTargetProxyFactory)); public ITargetProxy CreateProxy(object target, BindingDescription description) { IProxyType type = target.GetType().AsProxy(); IProxyMemberInfo memberInfo = type.GetMember(description.TargetName); if (memberInfo == null) { memberInfo = type.GetMember(description.TargetName, BindingFlags.Instance | BindingFlags.NonPublic); } if (memberInfo == null) { return(null); } UnityEventBase updateTrigger = null; if (!string.IsNullOrEmpty(description.UpdateTrigger)) { var updateTriggerPropertyInfo = type.GetProperty(description.UpdateTrigger); if (updateTriggerPropertyInfo != null) { updateTrigger = updateTriggerPropertyInfo.GetValue(target) as UnityEventBase; } if (updateTriggerPropertyInfo == null) { var updateTriggerFieldInfo = type.GetField(description.UpdateTrigger); if (updateTriggerFieldInfo != null) { updateTrigger = updateTriggerFieldInfo.GetValue(target) as UnityEventBase; } } } var propertyInfo = memberInfo as IProxyPropertyInfo; if (propertyInfo != null) { if (typeof(IObservableProperty).IsAssignableFrom(propertyInfo.ValueType)) { return(null); } if (typeof(UnityEventBase).IsAssignableFrom(propertyInfo.ValueType)) { //Event Type object unityEvent = propertyInfo.GetValue(target); Type[] paramTypes = GetUnityEventParametersType(propertyInfo.ValueType); return(CreateUnityEventProxy(target, (UnityEventBase)unityEvent, paramTypes)); } //Other Property Type if (updateTrigger == null)/* by UniversalTargetProxyFactory */ { return(null); } return(CreateUnityPropertyProxy(target, propertyInfo, updateTrigger)); } var fieldInfo = memberInfo as IProxyFieldInfo; if (fieldInfo != null) { if (typeof(IObservableProperty).IsAssignableFrom(fieldInfo.ValueType)) { return(null); } if (typeof(UnityEventBase).IsAssignableFrom(fieldInfo.ValueType)) { //Event Type object unityEvent = fieldInfo.GetValue(target); Type[] paramTypes = GetUnityEventParametersType(fieldInfo.ValueType); return(CreateUnityEventProxy(target, (UnityEventBase)unityEvent, paramTypes)); } //Other Property Type if (updateTrigger == null)/* by UniversalTargetProxyFactory */ { return(null); } return(CreateUnityFieldProxy(target, fieldInfo, updateTrigger)); } return(null); }
public ITargetProxy CreateProxy(object target, BindingDescription description) { IProxyType type = target.GetType().AsProxy(); IProxyMemberInfo memberInfo = type.GetMember(description.TargetName); if (memberInfo == null) { memberInfo = type.GetMember(description.TargetName, BindingFlags.Instance | BindingFlags.NonPublic); } if (memberInfo == null) { return(null); } var propertyInfo = memberInfo as IProxyPropertyInfo; if (propertyInfo != null) { var valueType = propertyInfo.ValueType; if (typeof(IObservableProperty).IsAssignableFrom(valueType)) { object observableValue = propertyInfo.GetValue(target); if (observableValue == null) { return(null); } return(new ObservableTargetProxy(target, (IObservableProperty)observableValue)); } // if (typeof(IInteractionAction).IsAssignableFrom(valueType)) // { // object interactionAction = propertyInfo.GetValue(target); // if (interactionAction == null) // return null; // // return new InteractionTargetProxy(target, (IInteractionAction)interactionAction); // } return(new PropertyTargetProxy(target, propertyInfo)); } var fieldInfo = memberInfo as IProxyFieldInfo; if (fieldInfo != null) { var valueType = fieldInfo.ValueType; if (typeof(IObservableProperty).IsAssignableFrom(valueType)) { object observableValue = fieldInfo.GetValue(target); if (observableValue == null) { return(null); } return(new ObservableTargetProxy(target, (IObservableProperty)observableValue)); } // if (typeof(IInteractionAction).IsAssignableFrom(valueType)) // { // object interactionAction = fieldInfo.GetValue(target); // if (interactionAction == null) // return null; // // return new InteractionTargetProxy(target, (IInteractionAction)interactionAction); // } return(new FieldTargetProxy(target, fieldInfo)); } var eventInfo = memberInfo as IProxyEventInfo; if (eventInfo != null) { return(new EventTargetProxy(target, eventInfo)); } var methodInfo = memberInfo as IProxyMethodInfo; if (methodInfo != null) { return(new MethodTargetProxy(target, methodInfo)); } return(null); }
public ITargetProxy CreateProxy(object target, BindingDescription description) { if (!target.GetType().IsSubclassOfGenericTypeDefinition(typeof(INotifyValueChanged <>))) { return(null); } if ("RegisterValueChangedCallback".Equals(description.TargetName)) { return(this.CreateValueChangedEventProxy(target)); } IProxyType type = target.GetType().AsProxy(); IProxyMemberInfo memberInfo = type.GetMember(description.TargetName); if (memberInfo == null) { memberInfo = type.GetMember(description.TargetName, BindingFlags.Instance | BindingFlags.NonPublic); } if (memberInfo == null) { throw new MissingMemberException(type.Type.FullName, description.TargetName); } var propertyInfo = memberInfo as IProxyPropertyInfo; if (propertyInfo != null) { if (typeof(IObservableProperty).IsAssignableFrom(propertyInfo.ValueType)) { return(null); } if (typeof(Clickable).IsAssignableFrom(propertyInfo.ValueType)) { //Event Type object clickable = propertyInfo.GetValue(target); if (clickable == null) { throw new NullReferenceException(propertyInfo.Name); } return(new ClickableEventProxy(target, (Clickable)clickable)); } //Other Property Type if (!"RegisterValueChangedCallback".Equals(description.UpdateTrigger))/* by UniversalTargetProxyFactory */ { return(null); } return(CreateVisualElementPropertyProxy(target, propertyInfo)); } var fieldInfo = memberInfo as IProxyFieldInfo; if (fieldInfo != null) { if (typeof(IObservableProperty).IsAssignableFrom(fieldInfo.ValueType)) { return(null); } if (typeof(Clickable).IsAssignableFrom(fieldInfo.ValueType)) { //Event Type object clickable = fieldInfo.GetValue(target); if (clickable == null) { throw new NullReferenceException(fieldInfo.Name); } return(new ClickableEventProxy(target, (Clickable)clickable)); } //Other Property Type if (!"RegisterValueChangedCallback".Equals(description.UpdateTrigger))/* by UniversalTargetProxyFactory */ { return(null); } return(CreateVisualElementFieldProxy(target, fieldInfo)); } return(null); }
public ITargetProxy CreateProxy(object target, BindingDescription description) { IProxyType type = target.GetType().AsProxy(); IProxyMemberInfo memberInfo = type.GetMember(description.TargetName); if (memberInfo == null) { memberInfo = type.GetMember(description.TargetName, BindingFlags.Instance | BindingFlags.NonPublic); } if (memberInfo == null) { throw new MissingMemberException(type.Type.FullName, description.TargetName); } var propertyInfo = memberInfo as IProxyPropertyInfo; if (propertyInfo != null) { var valueType = propertyInfo.ValueType; if (typeof(IObservableProperty).IsAssignableFrom(valueType)) { object observableValue = propertyInfo.GetValue(target); if (observableValue == null) { throw new NullReferenceException(string.Format("The \"{0}\" property is null in class \"{1}\".", propertyInfo.Name, propertyInfo.DeclaringType.Name)); } return(new ObservableTargetProxy(target, (IObservableProperty)observableValue)); } if (typeof(IInteractionAction).IsAssignableFrom(valueType)) { object interactionAction = propertyInfo.GetValue(target); if (interactionAction == null) { return(null); } return(new InteractionTargetProxy(target, (IInteractionAction)interactionAction)); } return(new PropertyTargetProxy(target, propertyInfo)); } var fieldInfo = memberInfo as IProxyFieldInfo; if (fieldInfo != null) { var valueType = fieldInfo.ValueType; if (typeof(IObservableProperty).IsAssignableFrom(valueType)) { object observableValue = fieldInfo.GetValue(target); if (observableValue == null) { throw new NullReferenceException(string.Format("The \"{0}\" field is null in class \"{1}\".", fieldInfo.Name, fieldInfo.DeclaringType.Name)); } return(new ObservableTargetProxy(target, (IObservableProperty)observableValue)); } if (typeof(IInteractionAction).IsAssignableFrom(valueType)) { object interactionAction = fieldInfo.GetValue(target); if (interactionAction == null) { return(null); } return(new InteractionTargetProxy(target, (IInteractionAction)interactionAction)); } return(new FieldTargetProxy(target, fieldInfo)); } var eventInfo = memberInfo as IProxyEventInfo; if (eventInfo != null) { return(new EventTargetProxy(target, eventInfo)); } var methodInfo = memberInfo as IProxyMethodInfo; if (methodInfo != null) { return(new MethodTargetProxy(target, methodInfo)); } return(null); }