public ProxyObject(ProxyObject parentProxy, IProxyPropertyInfo proxyPropertyInfo, object key) { this.parentProxy = parentProxy; this.proxyPropertyInfo = proxyPropertyInfo; this._key = key; if (this.parentProxy == null || this.proxyPropertyInfo == null) { throw new ArgumentNullException(); } this.parentProxy.ValueChanged += OnParent_ValueChanged; var parent = this.parentProxy.Value; if (parent != null && parent is INotifyPropertyChanged) { ((INotifyPropertyChanged)parent).PropertyChanged += OnParent_PropertyChanged; } if (this._key != null && parent != null && parent is INotifyCollectionChanged) { ((INotifyCollectionChanged)parent).CollectionChanged += OnParent_CollectionChanged; } this.type = proxyPropertyInfo.PropertyType; #if NETFX_CORE this.hasProperty = !this.type.GetTypeInfo().IsValueType; #else this.hasProperty = !this.type.IsValueType; #endif }
public AbstractPropertyObjectSourceProxy(object source, PropertyInfo propertyInfo) : base(source) { this.propertyInfo = propertyInfo; this.propertyName = this.propertyInfo.Name; this.proxyProperty = propertyInfo.AsProxy(); if (this.proxyProperty.IsStatic) { return; } if (this.Source == null) { if (log.IsWarnEnabled) { log.Warn("Unable to bind to source as it's null"); } return; } if (this.Source is INotifyPropertyChanged) { var sourceNotify = this.Source as INotifyPropertyChanged; sourceNotify.PropertyChanged += OnPropertyChanged; } if (this.Source is ValueType || !(this.Source is INotifyPropertyChanged)) { if (log.IsWarnEnabled) { log.WarnFormat("The \"{0}\" type can't be listened", this.Source.GetType().Name); } } }
public void Remove(IProxyPropertyInfo info) { if (info == null || info.PropertyInfo == null) { return; } properties.Remove(info.PropertyInfo); }
public void Add(IProxyPropertyInfo info) { if (info == null || info.PropertyInfo == null) { return; } properties[info.PropertyInfo] = info; }
public void SetProperty <T>(string name, T value) { IProxyPropertyInfo proxyPropertyInfo = this.ProxyType.GetProperty(name); if (proxyPropertyInfo == null) { throw new InvalidOperationException("Property not found"); } proxyPropertyInfo.SetValue(this.Value, value); }
public void Register(IProxyPropertyInfo info) { if (info == null) { return; } ProxyType proxyType = GetProxyType(info.DeclaringType); proxyType.Add(info); }
public VisualElementPropertyProxy(object target, IProxyPropertyInfo propertyInfo) : base(target, propertyInfo) { //不能所有的属性都自动绑定,可能绑定的其他值,与事件不匹配的值 if (target is INotifyValueChanged <TValue> ) { this.notifyValueChanged = (INotifyValueChanged <TValue>)target; } else { notifyValueChanged = null; } }
public ProxyCollection(ProxyObject parentProxy, IProxyPropertyInfo proxyPropertyInfo) : base(parentProxy, proxyPropertyInfo) { if (!typeof(T).Equals(proxyPropertyInfo.PropertyType)) { throw new ArgumentException(); } this._proxyItemPropertyInfo = this.ProxyType.GetProperty("Item"); if (this._proxyItemPropertyInfo == null) { throw new InvalidOperationException("Item not found"); } }
public T GetProperty <T>(string name) { IProxyPropertyInfo proxyPropertyInfo = this.ProxyType.GetProperty(name); if (proxyPropertyInfo == null) { throw new InvalidOperationException("Property not found"); } object value = proxyPropertyInfo.GetValue(this.Value); return((T)typeof(T).ToSafe(value)); }
protected virtual ITargetProxy CreateUnityPropertyProxy(object target, IProxyPropertyInfo propertyInfo, UnityEventBase updateTrigger) { Type type = propertyInfo.ValueType; #if NETFX_CORE TypeCode typeCode = WinRTLegacy.TypeExtensions.GetTypeCode(type); #else TypeCode typeCode = Type.GetTypeCode(type); #endif switch (typeCode) { case TypeCode.String: return(new UnityPropertyProxy <string>(target, propertyInfo, (UnityEvent <string>)updateTrigger)); case TypeCode.Boolean: return(new UnityPropertyProxy <bool>(target, propertyInfo, (UnityEvent <bool>)updateTrigger)); case TypeCode.SByte: return(new UnityPropertyProxy <sbyte>(target, propertyInfo, (UnityEvent <sbyte>)updateTrigger)); case TypeCode.Byte: return(new UnityPropertyProxy <byte>(target, propertyInfo, (UnityEvent <byte>)updateTrigger)); case TypeCode.Int16: return(new UnityPropertyProxy <short>(target, propertyInfo, (UnityEvent <short>)updateTrigger)); case TypeCode.UInt16: return(new UnityPropertyProxy <ushort>(target, propertyInfo, (UnityEvent <ushort>)updateTrigger)); case TypeCode.Int32: return(new UnityPropertyProxy <int>(target, propertyInfo, (UnityEvent <int>)updateTrigger)); case TypeCode.UInt32: return(new UnityPropertyProxy <uint>(target, propertyInfo, (UnityEvent <uint>)updateTrigger)); case TypeCode.Int64: return(new UnityPropertyProxy <long>(target, propertyInfo, (UnityEvent <long>)updateTrigger)); case TypeCode.UInt64: return(new UnityPropertyProxy <ulong>(target, propertyInfo, (UnityEvent <ulong>)updateTrigger)); case TypeCode.Char: return(new UnityPropertyProxy <char>(target, propertyInfo, (UnityEvent <char>)updateTrigger)); case TypeCode.Single: return(new UnityPropertyProxy <float>(target, propertyInfo, (UnityEvent <float>)updateTrigger)); case TypeCode.Double: return(new UnityPropertyProxy <double>(target, propertyInfo, (UnityEvent <double>)updateTrigger)); case TypeCode.Decimal: return(new UnityPropertyProxy <decimal>(target, propertyInfo, (UnityEvent <decimal>)updateTrigger)); case TypeCode.DateTime: return(new UnityPropertyProxy <DateTime>(target, propertyInfo, (UnityEvent <DateTime>)updateTrigger)); case TypeCode.Object: default: #if UNITY_IOS throw new NotSupportedException(); #else return((ITargetProxy)Activator.CreateInstance(typeof(UnityPropertyProxy <>).MakeGenericType(propertyInfo.ValueType), target, propertyInfo, updateTrigger)); #endif } }
protected virtual ITargetProxy CreateUnityPropertyProxy(object target, IProxyPropertyInfo propertyInfo, UnityEventBase updateTrigger) { Type type = propertyInfo.ValueType; TypeCode typeCode = propertyInfo.ValueTypeCode; switch (typeCode) { case TypeCode.String: return(new UnityPropertyProxy <string>(target, propertyInfo, (UnityEvent <string>)updateTrigger)); case TypeCode.Boolean: return(new UnityPropertyProxy <bool>(target, propertyInfo, (UnityEvent <bool>)updateTrigger)); case TypeCode.SByte: return(new UnityPropertyProxy <sbyte>(target, propertyInfo, (UnityEvent <sbyte>)updateTrigger)); case TypeCode.Byte: return(new UnityPropertyProxy <byte>(target, propertyInfo, (UnityEvent <byte>)updateTrigger)); case TypeCode.Int16: return(new UnityPropertyProxy <short>(target, propertyInfo, (UnityEvent <short>)updateTrigger)); case TypeCode.UInt16: return(new UnityPropertyProxy <ushort>(target, propertyInfo, (UnityEvent <ushort>)updateTrigger)); case TypeCode.Int32: return(new UnityPropertyProxy <int>(target, propertyInfo, (UnityEvent <int>)updateTrigger)); case TypeCode.UInt32: return(new UnityPropertyProxy <uint>(target, propertyInfo, (UnityEvent <uint>)updateTrigger)); case TypeCode.Int64: return(new UnityPropertyProxy <long>(target, propertyInfo, (UnityEvent <long>)updateTrigger)); case TypeCode.UInt64: return(new UnityPropertyProxy <ulong>(target, propertyInfo, (UnityEvent <ulong>)updateTrigger)); case TypeCode.Char: return(new UnityPropertyProxy <char>(target, propertyInfo, (UnityEvent <char>)updateTrigger)); case TypeCode.Single: return(new UnityPropertyProxy <float>(target, propertyInfo, (UnityEvent <float>)updateTrigger)); case TypeCode.Double: return(new UnityPropertyProxy <double>(target, propertyInfo, (UnityEvent <double>)updateTrigger)); case TypeCode.Decimal: return(new UnityPropertyProxy <decimal>(target, propertyInfo, (UnityEvent <decimal>)updateTrigger)); case TypeCode.DateTime: return(new UnityPropertyProxy <DateTime>(target, propertyInfo, (UnityEvent <DateTime>)updateTrigger)); case TypeCode.Object: default: { try { return((ITargetProxy)Activator.CreateInstance(typeof(UnityPropertyProxy <>).MakeGenericType(propertyInfo.ValueType), target, propertyInfo, updateTrigger)); } catch (Exception e) { throw new NotSupportedException("", e); } } } }
protected IProxyPropertyInfo CreateProxyPropertyInfo(PropertyInfo propertyInfo) { IProxyPropertyInfo info = null; #if UNITY_IOS info = new ProxyPropertyInfo(propertyInfo); #else try { Type type = propertyInfo.DeclaringType; if (propertyInfo.IsStatic()) { ParameterInfo[] parameters = propertyInfo.GetIndexParameters(); if (parameters != null && parameters.Length > 0) { throw new NotSupportedException(); } info = (IProxyPropertyInfo)Activator.CreateInstance(typeof(StaticProxyPropertyInfo <,>).MakeGenericType(type, propertyInfo.PropertyType), propertyInfo); } else { ParameterInfo[] parameters = propertyInfo.GetIndexParameters(); if (parameters != null && parameters.Length == 1) { throw new NotSupportedException(); } info = (IProxyPropertyInfo)Activator.CreateInstance(typeof(ProxyPropertyInfo <,>).MakeGenericType(type, propertyInfo.PropertyType), propertyInfo); } } catch (NotSupportedException e) { throw e; } catch (Exception) { info = new ProxyPropertyInfo(propertyInfo); } #endif if (info != null) { this.properties.Add(info.Name, info); } return(info); }
public PropertyNodeProxy(object source, IProxyPropertyInfo propertyInfo) : base(source) { this.propertyInfo = propertyInfo; if (this.source == null) { return; } if (this.source is INotifyPropertyChanged) { var sourceNotify = this.source as INotifyPropertyChanged; sourceNotify.PropertyChanged += OnPropertyChanged; } else { if (log.IsWarnEnabled) { log.WarnFormat("The type {0} does not inherit the INotifyPropertyChanged interface and does not support the PropertyChanged event.", propertyInfo.DeclaringType.Name); } } }
public UnityPropertyProxy(object target, IProxyPropertyInfo propertyInfo, UnityEvent <TValue> unityEvent) : base(target, propertyInfo) { this.unityEvent = unityEvent; }
protected virtual ISourceProxy CreateProxy(object source, IPathNode node) { IProxyType proxyType = source.GetType().AsProxy(); if (node is IndexedNode) { var itemInfo = proxyType.GetItem(); if (itemInfo == null) { return(null); } var intIndexedNode = node as IntegerIndexedNode; if (intIndexedNode != null) { return(new IntItemNodeProxy((ICollection)source, intIndexedNode.Value, itemInfo)); } var stringIndexedNode = node as StringIndexedNode; if (stringIndexedNode != null) { return(new StringItemNodeProxy((ICollection)source, stringIndexedNode.Value, itemInfo)); } return(null); } var memberNode = node as MemberNode; if (memberNode == null) { return(null); } var memberInfo = memberNode.MemberInfo; if (memberInfo == null) { memberInfo = source.GetType().FindFirstMemberInfo(memberNode.Name); } if (memberInfo == null || memberInfo.IsStatic()) { return(null); } var propertyInfo = memberInfo as PropertyInfo; if (propertyInfo != null) { IProxyPropertyInfo proxyPropertyInfo = propertyInfo.AsProxy(); var valueType = proxyPropertyInfo.ValueType; if (typeof(IObservableProperty).IsAssignableFrom(valueType)) { object observableValue = proxyPropertyInfo.GetValue(source); if (observableValue == null) { return(null); } return(new ObservableNodeProxy(source, (IObservableProperty)observableValue)); } // else if (typeof(IInteractionRequest).IsAssignableFrom(valueType)) // { // object request = proxyPropertyInfo.GetValue(source); // if (request == null) // return null; // return new InteractionNodeProxy(source, (IInteractionRequest)request); // } else { return(new PropertyNodeProxy(source, proxyPropertyInfo)); } } var fieldInfo = memberInfo as FieldInfo; if (fieldInfo != null) { IProxyFieldInfo proxyFieldInfo = fieldInfo.AsProxy(); var valueType = proxyFieldInfo.ValueType; if (typeof(IObservableProperty).IsAssignableFrom(valueType)) { object observableValue = proxyFieldInfo.GetValue(source); if (observableValue == null) { return(null); } return(new ObservableNodeProxy(source, (IObservableProperty)observableValue)); } // else if (typeof(IInteractionRequest).IsAssignableFrom(valueType)) // { // object request = proxyFieldInfo.GetValue(source); // if (request == null) // return null; // return new InteractionNodeProxy(source, (IInteractionRequest)request); // } else { return(new FieldNodeProxy(source, proxyFieldInfo)); } } var methodInfo = memberInfo as MethodInfo; if (methodInfo != null && methodInfo.ReturnType.Equals(typeof(void))) { return(new MethodNodeProxy(source, methodInfo.AsProxy())); } var eventInfo = memberInfo as EventInfo; if (eventInfo != null) { return(new EventNodeProxy(source, eventInfo.AsProxy())); } 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); } 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); }
public override void SetValue(object value) { var target = this.Target; if (target == null) { return; } if (this.command != null) { UnbindCommand(this.command); this.command = null; } if (this.invoker != null) { this.invoker = null; } if (this.handler != null) { this.handler = null; } if (value == null) { return; } //Bind Command ICommand command = value as ICommand; if (command != null) { if (this.interactable == null) { var interactablePropertyInfo = target.GetType().GetProperty("interactable"); if (interactablePropertyInfo != null) { this.interactable = interactablePropertyInfo.AsProxy(); } } this.command = command; BindCommand(this.command); UpdateTargetInteractable(); return; } //Bind Method IProxyInvoker proxyInvoker = value as IProxyInvoker; if (proxyInvoker != null) { if (this.IsValid(proxyInvoker)) { this.invoker = proxyInvoker; return; } throw new ArgumentException("Bind method failed.the parameter types do not match."); } //Bind Delegate Delegate handler = value as Delegate; if (handler != null) { if (this.IsValid(handler)) { this.handler = handler; return; } throw new ArgumentException("Bind method failed.the parameter types do not match."); } //Bind Script Function IInvoker invoker = value as IInvoker; if (invoker != null) { this.invoker = invoker; } }
public PropertyTargetProxy(object target, PropertyInfo propertyInfo) : base(target) { this.propertyInfo = propertyInfo; this.proxyProperty = propertyInfo.AsProxy(); }
protected virtual IObjectSourceProxy CreateChainedProxy(object source, IPathNode node, PathToken nextToken, IObjectSourceProxyFactory factory) { var indexedNode = node as IndexedNode; if (indexedNode != null) { var itemPropertyInfo = this.FindItemPropertyInfo(source.GetType()); if (itemPropertyInfo == null) { return(null); } return(new ChainedItemObjectSourceProxy(source, itemPropertyInfo, nextToken, factory, indexedNode.Value)); } var memberNode = node as MemberNode; if (memberNode == null) { return(null); } var memberInfo = memberNode.MemberInfo; if (memberInfo == null) { memberInfo = source.GetType().FindFirstMemberInfo(memberNode.Name); } if (memberInfo == null || memberInfo.IsStatic()) { return(null); } var propertyInfo = memberInfo as PropertyInfo; if (propertyInfo != null) { var propertyType = propertyInfo.PropertyType; if (typeof(IObservableProperty).IsAssignableFrom(propertyType)) { IProxyPropertyInfo proxyPropertyInfo = propertyInfo.AsProxy(); object observableValue = proxyPropertyInfo.GetValue(source); if (observableValue == null) { return(null); } return(new ChainedObservablePropertyObjectSourceProxy(source, (IObservableProperty)observableValue, nextToken, factory)); } else { return(new ChainedPropertyObjectSourceProxy(source, propertyInfo, nextToken, factory)); } } var fieldInfo = memberInfo as FieldInfo; if (fieldInfo != null) { var fieldType = fieldInfo.FieldType; if (typeof(IObservableProperty).IsAssignableFrom(fieldType)) { IProxyFieldInfo proxyFieldInfo = fieldInfo.AsProxy(); object observableValue = proxyFieldInfo.GetValue(source); if (observableValue == null) { return(null); } return(new ChainedObservablePropertyObjectSourceProxy(source, (IObservableProperty)observableValue, nextToken, factory)); } else { return(new ChainedFieldObjectSourceProxy(source, fieldInfo, nextToken, factory)); } } 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) { throw new MissingMemberException(type.Type.FullName, description.TargetName); } UnityEventBase 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 UnityEventBase; } if (updateTriggerFieldInfo != null) { updateTrigger = updateTriggerFieldInfo.GetValue(target) as UnityEventBase; } 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(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); }
protected virtual IObjectSourceProxy CreateStaticChainedProxy(Type type, IPathNode node, PathToken nextToken, IObjectSourceProxyFactory factory) { var memberNode = node as MemberNode; if (memberNode == null) { return(null); } var memberInfo = memberNode.MemberInfo; if (memberInfo == null) { memberInfo = this.FindStaticMemberInfo(type, memberNode.Name); } if (memberInfo == null) { return(null); } var propertyInfo = memberInfo as PropertyInfo; if (propertyInfo != null) { var propertyType = propertyInfo.PropertyType; if (typeof(IObservableProperty).IsAssignableFrom(propertyType)) { IProxyPropertyInfo proxyPropertyInfo = propertyInfo.AsProxy(); object observableValue = proxyPropertyInfo.GetValue(null); if (observableValue == null) { return(null); } return(new ChainedObservablePropertyObjectSourceProxy((IObservableProperty)observableValue, nextToken, factory)); } else { return(new ChainedPropertyObjectSourceProxy(propertyInfo, nextToken, factory)); } } var fieldInfo = memberInfo as FieldInfo; if (fieldInfo != null) { var fieldType = fieldInfo.FieldType; if (typeof(IObservableProperty).IsAssignableFrom(fieldType)) { IProxyFieldInfo proxyFieldInfo = fieldInfo.AsProxy(); object observableValue = proxyFieldInfo.GetValue(null); if (observableValue == null) { return(null); } return(new ChainedObservablePropertyObjectSourceProxy((IObservableProperty)observableValue, nextToken, factory)); } else { return(new ChainedFieldObjectSourceProxy(fieldInfo, nextToken, factory)); } } return(null); }
protected virtual IObjectSourceProxy CreateStaticLeafProxy(Type type, IPathNode node) { var memberNode = node as MemberNode; if (memberNode == null) { return(null); } var memberInfo = memberNode.MemberInfo; if (memberInfo == null) { memberInfo = this.FindStaticMemberInfo(type, memberNode.Name); } if (memberInfo == null) { return(null); } var propertyInfo = memberInfo as PropertyInfo; if (propertyInfo != null) { var propertyType = propertyInfo.PropertyType; if (typeof(IObservableProperty).IsAssignableFrom(propertyType)) { IProxyPropertyInfo proxyPropertyInfo = propertyInfo.AsProxy(); object observableValue = proxyPropertyInfo.GetValue(null); if (observableValue == null) { throw new ArgumentNullException(); } return(new ObservablePropertyObjectSourceProxy((IObservableProperty)observableValue)); } else { return(new LeafPropertyObjectSourceProxy(null, propertyInfo)); } } var fieldInfo = memberInfo as FieldInfo; if (fieldInfo != null) { var fieldType = fieldInfo.FieldType; if (typeof(IObservableProperty).IsAssignableFrom(fieldType)) { IProxyFieldInfo proxyFieldInfo = fieldInfo.AsProxy(); object observableValue = proxyFieldInfo.GetValue(null); if (observableValue == null) { throw new ArgumentNullException(); } return(new ObservablePropertyObjectSourceProxy((IObservableProperty)observableValue)); } else { return(new LeafFieldObjectSourceProxy(fieldInfo)); } } var methodInfo = memberInfo as MethodInfo; if (methodInfo != null && methodInfo.ReturnType.Equals(typeof(void))) { return(new VoidMethodObjectSourceProxy(methodInfo)); } var eventInfo = memberInfo as EventInfo; if (eventInfo != null) { return(new EventObjectSourceProxy(eventInfo)); } return(null); }
public ProxyObject(ProxyObject parentProxy, IProxyPropertyInfo proxyPropertyInfo) : this(parentProxy, proxyPropertyInfo, null) { }
protected virtual IObjectSourceProxy CreateLeafProxy(object source, IPathNode node) { var indexedNode = node as IndexedNode; if (indexedNode != null) { var itemPropertyInfo = this.FindItemPropertyInfo(source.GetType()); if (itemPropertyInfo == null) { return(null); } return(new LeafItemObjectSourceProxy(source, itemPropertyInfo, indexedNode.Value)); } var memberNode = node as MemberNode; if (memberNode == null) { return(null); } var memberInfo = memberNode.MemberInfo; if (memberInfo == null) { memberInfo = source.GetType().FindFirstMemberInfo(memberNode.Name); } if (memberInfo == null || memberInfo.IsStatic()) { return(null); } var propertyInfo = memberInfo as PropertyInfo; if (propertyInfo != null) { var propertyType = propertyInfo.PropertyType; if (typeof(IObservableProperty).IsAssignableFrom(propertyType)) { IProxyPropertyInfo proxyPropertyInfo = propertyInfo.AsProxy(); object observableValue = proxyPropertyInfo.GetValue(source); if (observableValue == null) { return(null); } return(new ObservablePropertyObjectSourceProxy(source, (IObservableProperty)observableValue)); } else { return(new LeafPropertyObjectSourceProxy(source, propertyInfo)); } } var fieldInfo = memberInfo as FieldInfo; if (fieldInfo != null) { var fieldType = fieldInfo.FieldType; if (typeof(IObservableProperty).IsAssignableFrom(fieldType)) { IProxyFieldInfo proxyFieldInfo = fieldInfo.AsProxy(); object observableValue = proxyFieldInfo.GetValue(source); if (observableValue == null) { return(null); } return(new ObservablePropertyObjectSourceProxy(source, (IObservableProperty)observableValue)); } else { return(new LeafFieldObjectSourceProxy(source, fieldInfo)); } } var methodInfo = memberInfo as MethodInfo; if (methodInfo != null && methodInfo.ReturnType.Equals(typeof(void))) { return(new VoidMethodObjectSourceProxy(source, methodInfo)); } var eventInfo = memberInfo as EventInfo; if (eventInfo != null) { return(new EventObjectSourceProxy(source, eventInfo)); } return(null); }
protected virtual ITargetProxy CreateVisualElementPropertyProxy(object target, IProxyPropertyInfo propertyInfo) { Type type = propertyInfo.ValueType; #if NETFX_CORE TypeCode typeCode = WinRTLegacy.TypeExtensions.GetTypeCode(type); #else TypeCode typeCode = Type.GetTypeCode(type); #endif switch (typeCode) { case TypeCode.String: return(new VisualElementPropertyProxy <string>(target, propertyInfo)); case TypeCode.Boolean: return(new VisualElementPropertyProxy <bool>(target, propertyInfo)); case TypeCode.SByte: return(new VisualElementPropertyProxy <sbyte>(target, propertyInfo)); case TypeCode.Byte: return(new VisualElementPropertyProxy <byte>(target, propertyInfo)); case TypeCode.Int16: return(new VisualElementPropertyProxy <short>(target, propertyInfo)); case TypeCode.UInt16: return(new VisualElementPropertyProxy <ushort>(target, propertyInfo)); case TypeCode.Int32: return(new VisualElementPropertyProxy <int>(target, propertyInfo)); case TypeCode.UInt32: return(new VisualElementPropertyProxy <uint>(target, propertyInfo)); case TypeCode.Int64: return(new VisualElementPropertyProxy <long>(target, propertyInfo)); case TypeCode.UInt64: return(new VisualElementPropertyProxy <ulong>(target, propertyInfo)); case TypeCode.Char: return(new VisualElementPropertyProxy <char>(target, propertyInfo)); case TypeCode.Single: return(new VisualElementPropertyProxy <float>(target, propertyInfo)); case TypeCode.Double: return(new VisualElementPropertyProxy <double>(target, propertyInfo)); case TypeCode.Decimal: return(new VisualElementPropertyProxy <decimal>(target, propertyInfo)); case TypeCode.DateTime: return(new VisualElementPropertyProxy <DateTime>(target, propertyInfo)); case TypeCode.Object: default: { try { return((ITargetProxy)Activator.CreateInstance(typeof(VisualElementPropertyProxy <>).MakeGenericType(type), target, propertyInfo)); } catch (Exception e) { throw new NotSupportedException("", e); } } } }
public PropertyTargetProxy(object target, IProxyPropertyInfo propertyInfo) : base(target) { this.propertyInfo = propertyInfo; }
public FairyPropertyProxy(object target, IProxyPropertyInfo propertyInfo, EventListener listener) : base(target, propertyInfo) { this.listener = listener; }
protected virtual ISourceProxy CreateProxy(object source, IPathNode node) { IProxyType proxyType = source.GetType().AsProxy(); if (node is IndexedNode) { if (!(source is ICollection)) { throw new ProxyException("Type \"{0}\" is not a collection and cannot be accessed by index \"{1}\".", proxyType.Type.Name, node.ToString()); } var itemInfo = proxyType.GetItem(); if (itemInfo == null) { throw new MissingMemberException(proxyType.Type.FullName, "Item"); } var intIndexedNode = node as IntegerIndexedNode; if (intIndexedNode != null) { return(new IntItemNodeProxy((ICollection)source, intIndexedNode.Value, itemInfo)); } var stringIndexedNode = node as StringIndexedNode; if (stringIndexedNode != null) { return(new StringItemNodeProxy((ICollection)source, stringIndexedNode.Value, itemInfo)); } return(null); } var memberNode = node as MemberNode; if (memberNode == null) { return(null); } var memberInfo = memberNode.MemberInfo; if (memberInfo == null) { memberInfo = source.GetType().FindFirstMemberInfo(memberNode.Name); } if (memberInfo == null || memberInfo.IsStatic()) { throw new MissingMemberException(proxyType.Type.FullName, memberNode.Name); } var propertyInfo = memberInfo as PropertyInfo; if (propertyInfo != null) { IProxyPropertyInfo proxyPropertyInfo = propertyInfo.AsProxy(); var valueType = proxyPropertyInfo.ValueType; if (typeof(IObservableProperty).IsAssignableFrom(valueType)) { object observableValue = proxyPropertyInfo.GetValue(source); if (observableValue == null) { return(null); } return(new ObservableNodeProxy(source, (IObservableProperty)observableValue)); } else if (typeof(IInteractionRequest).IsAssignableFrom(valueType)) { object request = proxyPropertyInfo.GetValue(source); if (request == null) { return(null); } return(new InteractionNodeProxy(source, (IInteractionRequest)request)); } else { return(new PropertyNodeProxy(source, proxyPropertyInfo)); } } var fieldInfo = memberInfo as FieldInfo; if (fieldInfo != null) { IProxyFieldInfo proxyFieldInfo = fieldInfo.AsProxy(); var valueType = proxyFieldInfo.ValueType; if (typeof(IObservableProperty).IsAssignableFrom(valueType)) { object observableValue = proxyFieldInfo.GetValue(source); if (observableValue == null) { return(null); } return(new ObservableNodeProxy(source, (IObservableProperty)observableValue)); } else if (typeof(IInteractionRequest).IsAssignableFrom(valueType)) { object request = proxyFieldInfo.GetValue(source); if (request == null) { return(null); } return(new InteractionNodeProxy(source, (IInteractionRequest)request)); } else { return(new FieldNodeProxy(source, proxyFieldInfo)); } } var methodInfo = memberInfo as MethodInfo; if (methodInfo != null && methodInfo.ReturnType.Equals(typeof(void))) { return(new MethodNodeProxy(source, methodInfo.AsProxy())); } var eventInfo = memberInfo as EventInfo; if (eventInfo != null) { return(new EventNodeProxy(source, eventInfo.AsProxy())); } return(null); }
public PropertyNodeProxy(IProxyPropertyInfo propertyInfo) : this(null, propertyInfo) { }