Castle.MonoRail.ActiveRecordSupport.ARDataBinder.SetPropertyValue C# (CSharp) Method

SetPropertyValue() protected method

protected SetPropertyValue ( object instance, PropertyInfo prop, object value ) : void
instance object
prop System.Reflection.PropertyInfo
value object
return void
		protected override void SetPropertyValue(object instance, PropertyInfo prop, object value)
		{
			object[] attributes = prop.GetCustomAttributes(typeof(WithAccessAttribute), false);

			if (attributes.Length == 0)
			{
				base.SetPropertyValue(instance, prop, value);
				return;
			}

			WithAccessAttribute accessAttribute = (WithAccessAttribute) attributes[0];
			IPropertyAccessor propertyAccessor;

			switch(accessAttribute.Access)
			{
				case PropertyAccess.Property:
					propertyAccessor = PropertyAccessorFactory.GetPropertyAccessor("property");
					break;
				case PropertyAccess.Field:
					propertyAccessor = PropertyAccessorFactory.GetPropertyAccessor("field");
					break;
				case PropertyAccess.FieldCamelcase:
					propertyAccessor = PropertyAccessorFactory.GetPropertyAccessor("field.camelcase");
					break;
				case PropertyAccess.FieldCamelcaseUnderscore:
					propertyAccessor = PropertyAccessorFactory.GetPropertyAccessor("field.camelcase-underscore");
					break;
				case PropertyAccess.FieldPascalcaseMUnderscore:
					propertyAccessor = PropertyAccessorFactory.GetPropertyAccessor("field.pascalcase-m-underscore");
					break;
				case PropertyAccess.FieldLowercaseUnderscore:
					propertyAccessor = PropertyAccessorFactory.GetPropertyAccessor("field.lowercase-underscore");
					break;
				case PropertyAccess.NosetterCamelcase:
					propertyAccessor = PropertyAccessorFactory.GetPropertyAccessor("nosetter.camelcase");
					break;
				case PropertyAccess.NosetterCamelcaseUnderscore:
					propertyAccessor = PropertyAccessorFactory.GetPropertyAccessor("nosetter.camelcase-underscore");
					break;
				case PropertyAccess.NosetterPascalcaseMUndersc:
					propertyAccessor = PropertyAccessorFactory.GetPropertyAccessor("nosetter.pascalcase-m-underscore");
					break;
				case PropertyAccess.NosetterLowercaseUnderscore:
					propertyAccessor = PropertyAccessorFactory.GetPropertyAccessor("nosetter.lowercase-underscore");
					break;
				case PropertyAccess.NosetterLowercase:
					propertyAccessor = PropertyAccessorFactory.GetPropertyAccessor("nosetter.lowercase");
					break;
				default:
					throw new ArgumentOutOfRangeException();
			}

			propertyAccessor.GetSetter(instance.GetType(), prop.Name).Set(instance, value);
		}