/// <summary> /// Creates a new <see cref="PropertyRule"/> for the specified property and condition type. /// </summary> /// <param name="rootType"></param> /// <param name="property"></param> /// <param name="conditionType"></param> /// <param name="invocationTypes"></param> /// <param name="predicates"></param> public PropertyRule(string rootType, string property, Func <ModelType, ConditionType> conditionType, RuleInvocationType invocationTypes, params string[] predicates) : base(rootType, rootType + "." + property, invocationTypes, predicates) { this.property = property; this.ExecutionLocation = RuleExecutionLocation.ServerAndClient; if (conditionType != null) { Initialize += (s, e) => { // Make sure the condition type and rule have a unique name var type = RootType; var error = conditionType(type); var originalCode = error.Code; var uniqueCode = originalCode; int count = 1; while (ConditionType.GetConditionTypes(type).Any(ct => ct.Code == uniqueCode)) { uniqueCode = originalCode + count++; } error.Code = uniqueCode; Name = uniqueCode; // Assign the condition type to the rule ConditionTypes = new ConditionType[] { error }; } } ; }