// --- Methods ---

		// --- Methods | Validation ---

		public void Validate()
		{
			brokenRules = new List<BrokenPropertyRuleInfo>();

			//this.Merge(GetBrokenRuleInfos(this.propertyValueRules), GetBrokenRuleInfos(this.propertyStateRules));

			foreach (var stateRule in propertyStateRules)
			{
				var validator = stateRule.Validator;
				var currentPropertyValue = stateRule.PropertyInfo.GetValue(this.ManagedObject, null);

				if (!validator.Validate(currentPropertyValue, this.ManagedObject))
				{
					var info = new BrokenPropertyRuleInfo()
					{
						AttemptedValue = currentPropertyValue,
						ErrorMessage = GetPropertyStateErrorMessage(stateRule, currentPropertyValue, this.ManagedObject),
						PropertyInfo = stateRule.PropertyInfo
					};
					brokenRules.Add(info);
				}
			}


		}
		private List<BrokenPropertyRuleInfo> GetBrokenRuleInfos(List<PropertyValueRule> propertyValueRules)
		{
			var brokenRules = new List<BrokenPropertyRuleInfo>();

			foreach (var valueRule in propertyValueRules)
			{
				var validator = valueRule.Validator;
				var currentPropertyValue = valueRule.PropertyInfo.GetValue(this.ManagedObject, null);

				if (!validator.Validate(currentPropertyValue))
				{
					var info = new BrokenPropertyRuleInfo()
					{
						AttemptedValue = currentPropertyValue,
						ErrorMessage = GetPropertyValueErrorMessage(valueRule, currentPropertyValue),
						PropertyInfo = valueRule.PropertyInfo
					};
					brokenRules.Add(info);
				}
			}
			return brokenRules;
		}