Exemplo n.º 1
0
        /// <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 };
                }
            }
            ;
        }