/// <summary> /// Gets the member's value on the specified object. /// </summary> /// <param name="obj">The obj.</param> /// <param name="memberName">Name of the member.</param> /// <param name="accessorFactory">The accessor factory.</param> /// <returns>The member's value</returns> public static object GetMember(object obj, string memberName, AccessorFactory accessorFactory) { try { object value = null; if (memberName.IndexOf("[") > -1) { value = GetArrayMember(obj, memberName, accessorFactory); } else { if (obj is IDictionary) { value = ((IDictionary)obj)[memberName]; } else if (obj is IDictionary <string, object> ) { value = ((IDictionary <string, object>)obj)[memberName]; } else { Type targetType = obj.GetType(); IGetAccessorFactory getAccessorFactory = accessorFactory.GetAccessorFactory; IGetAccessor getAccessor = getAccessorFactory.CreateGetAccessor(targetType, memberName); if (getAccessor == null) { throw new ProbeException("No Get method for member " + memberName + " on instance of " + obj.GetType().Name); } try { value = getAccessor.Get(obj); } catch (Exception ae) { throw new ProbeException(ae); } } } return(value); } catch (ProbeException) { throw; } catch (Exception e) { throw new ProbeException("Could not Set property '" + memberName + "' for " + obj.GetType().Name + ". Cause: " + e.Message, e); } }
public void SetUp() { intSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicInt"); intGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicInt"); longSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicLong"); longGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicLong"); sbyteSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicSbyte"); sbyteGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicSbyte"); stringSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicString"); stringGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicString"); datetimeSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicDateTime"); datetimeGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicDateTime"); decimalSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicDecimal"); decimalGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicDecimal"); byteSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicByte"); byteGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicByte"); charSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicChar"); charGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicChar"); shortSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicShort"); shortGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicShort"); ushortSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicUshort"); ushortGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicUshort"); uintSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicUint"); uintGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicUint"); ulongSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicUlong"); ulongGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicUlong"); boolSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicBool"); boolGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicBool"); doubleSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicDouble"); doubleGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicDouble"); floatSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicFloat"); floatGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicFloat"); guidSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicGuid"); guidGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicGuid"); timespanSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicTimeSpan"); timespanGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicTimeSpan"); accountSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicAccount"); accountGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicAccount"); enumSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicDay"); enumGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicDay"); #if dotnet2 nullableSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "publicintNullable"); nullableGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "publicintNullable"); #endif }
public void SetUp() { intSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedInt"); intGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedInt"); longSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedLong"); longGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedLong"); sbyteSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedSbyte"); sbyteGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedSbyte"); stringSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedString"); stringGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedString"); datetimeSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedDateTime"); datetimeGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedDateTime"); decimalSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedDecimal"); decimalGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedDecimal"); byteSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedByte"); byteGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedByte"); charSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedChar"); charGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedChar"); shortSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedShort"); shortGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedShort"); ushortSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedUshort"); ushortGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedUshort"); uintSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedUint"); uintGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedUint"); ulongSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedUlong"); ulongGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedUlong"); boolSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedBool"); boolGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedBool"); doubleSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedDouble"); doubleGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedDouble"); floatSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedFloat"); floatGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedFloat"); guidSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedGuid"); guidGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedGuid"); timespanSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedTimeSpan"); timespanGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedTimeSpan"); accountSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedAccount"); accountGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedAccount"); enumSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedDay"); enumGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedDay"); #if dotnet2 nullableSetAccessor = factorySet.CreateSetAccessor(typeof(Property), "protectedintNullable"); nullableGetAccessor = factoryGet.CreateGetAccessor(typeof(Property), "protectedintNullable"); #endif }
/// <summary> /// Initializes a new instance of the <see cref="ParameterProperty"/> class. /// </summary> /// <param name="propertyName">Name of the property.</param> /// <param name="columnName">Name of the column.</param> /// <param name="callBackName">Name of the call back.</param> /// <param name="clrType">Type of the CLR.</param> /// <param name="dbType">Type of the db.</param> /// <param name="directionAttribute">The direction attribute.</param> /// <param name="nullValue">The null value.</param> /// <param name="precision">The precision.</param> /// <param name="scale">The scale.</param> /// <param name="size">The size.</param> /// <param name="parameterClass">The parameter class.</param> /// <param name="dataExchangeFactory">The data exchange factory.</param> public ParameterProperty( string propertyName, string columnName, string callBackName, string clrType, string dbType, string directionAttribute, string nullValue, Byte precision, Byte scale, int size, Type parameterClass, DataExchangeFactory dataExchangeFactory ) { Contract.Require.That(propertyName, Is.Not.Null & Is.Not.Empty).When("retrieving argument propertyName in ParameterProperty constructor"); this.columnName = columnName; this.callBackName = callBackName; this.clrType = clrType; this.dbType = dbType; this.nullValue = nullValue; this.precision = precision; this.scale = scale; this.size = size; this._parameterClass = parameterClass; this._dataExchangeFactory = dataExchangeFactory; #region Direction if (directionAttribute.Length > 0) { direction = (ParameterDirection)Enum.Parse(typeof(ParameterDirection), directionAttribute, true); this.directionAttribute = direction.ToString(); } #endregion Direction #region Property Name this._currentPropertyName = propertyName; this._propertyPlaceholder = propertyName; if (propertyName.IndexOf('.') < 0) { isComplexMemberName = false; } else // complex member name FavouriteLineItem.Id { isComplexMemberName = true; } #endregion Property Name #region GetAccessor if (!typeof(IDictionary).IsAssignableFrom(parameterClass) && // Hashtable parameter map parameterClass != null && // value property !dataExchangeFactory.TypeHandlerFactory.IsSimpleType(parameterClass)) // value property { if (!isComplexMemberName) { IGetAccessorFactory getAccessorFactory = dataExchangeFactory.AccessorFactory.GetAccessorFactory; getAccessor = getAccessorFactory.CreateGetAccessor(parameterClass, propertyName); } else // complex member name FavouriteLineItem.Id { string memberName = propertyName.Substring(propertyName.LastIndexOf('.') + 1); string parentName = propertyName.Substring(0, propertyName.LastIndexOf('.')); Type parentType = ObjectProbe.GetMemberTypeForGetter(parameterClass, parentName); IGetAccessorFactory getAccessorFactory = dataExchangeFactory.AccessorFactory.GetAccessorFactory; getAccessor = getAccessorFactory.CreateGetAccessor(parentType, memberName); } } #endregion GetAccessor #region TypeHandler if (CallBackName.Length > 0) { try { Type type = dataExchangeFactory.TypeHandlerFactory.GetType(CallBackName); ITypeHandlerCallback typeHandlerCallback = (ITypeHandlerCallback)Activator.CreateInstance(type); typeHandler = new CustomTypeHandler(typeHandlerCallback); } catch (Exception e) { throw new ConfigurationException("Error occurred during custom type handler configuration. Cause: " + e.Message, e); } } else { if (CLRType.Length == 0) // Unknown { if (getAccessor != null && dataExchangeFactory.TypeHandlerFactory.IsSimpleType(getAccessor.MemberType)) { // Primitive typeHandler = dataExchangeFactory.TypeHandlerFactory.GetTypeHandler(getAccessor.MemberType, dbType); } else { typeHandler = dataExchangeFactory.TypeHandlerFactory.GetUnkownTypeHandler(); } } else // If we specify a CLR type, use it { Type type = TypeUtils.ResolveType(CLRType); if (dataExchangeFactory.TypeHandlerFactory.IsSimpleType(type)) { // Primitive typeHandler = dataExchangeFactory.TypeHandlerFactory.GetTypeHandler(type, dbType); } else { // .NET object type = ObjectProbe.GetMemberTypeForGetter(parameterClass, PropertyName); typeHandler = dataExchangeFactory.TypeHandlerFactory.GetTypeHandler(type, dbType); } } } #endregion TypeHandler }
/// <summary> /// Initializes the parameter property /// </summary> /// <param name="scope">The scope.</param> /// <param name="parameterClass">The parameter class.</param> public void Initialize(IScope scope, Type parameterClass) { if (_directionAttribute.Length > 0) { _direction = (ParameterDirection)Enum.Parse(typeof(ParameterDirection), _directionAttribute, true); } if (!typeof(IDictionary).IsAssignableFrom(parameterClass) && // Hashtable parameter map parameterClass != null && // value property !scope.DataExchangeFactory.TypeHandlerFactory.IsSimpleType(parameterClass)) // value property { if (!_isComplexMemberName) { IGetAccessorFactory getAccessorFactory = scope.DataExchangeFactory.AccessorFactory.GetAccessorFactory; _getAccessor = getAccessorFactory.CreateGetAccessor(parameterClass, _propertyName); } else // complex member name FavouriteLineItem.Id { string memberName = _propertyName.Substring(_propertyName.LastIndexOf('.') + 1); string parentName = _propertyName.Substring(0, _propertyName.LastIndexOf('.')); Type parentType = ObjectProbe.GetMemberTypeForGetter(parameterClass, parentName); IGetAccessorFactory getAccessorFactory = scope.DataExchangeFactory.AccessorFactory.GetAccessorFactory; _getAccessor = getAccessorFactory.CreateGetAccessor(parentType, memberName); } } scope.ErrorContext.MoreInfo = "Check the parameter mapping typeHandler attribute '" + this.CallBackName + "' (must be a ITypeHandlerCallback implementation)."; if (this.CallBackName.Length > 0) { try { Type type = scope.DataExchangeFactory.TypeHandlerFactory.GetType(this.CallBackName); ITypeHandlerCallback typeHandlerCallback = (ITypeHandlerCallback)Activator.CreateInstance(type); _typeHandler = new CustomTypeHandler(typeHandlerCallback); } catch (Exception e) { throw new ConfigurationException("Error occurred during custom type handler configuration. Cause: " + e.Message, e); } } else { if (this.CLRType.Length == 0) // Unknown { if (_getAccessor != null && scope.DataExchangeFactory.TypeHandlerFactory.IsSimpleType(_getAccessor.MemberType)) { // Primitive _typeHandler = scope.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(_getAccessor.MemberType, _dbType); } else { _typeHandler = scope.DataExchangeFactory.TypeHandlerFactory.GetUnkownTypeHandler(); } } else // If we specify a CLR type, use it { Type type = TypeUtils.ResolveType(this.CLRType); if (scope.DataExchangeFactory.TypeHandlerFactory.IsSimpleType(type)) { // Primitive _typeHandler = scope.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(type, _dbType); } else { // .NET object type = ObjectProbe.GetMemberTypeForGetter(type, this.PropertyName); _typeHandler = scope.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(type, _dbType); } } } }