/// <summary> /// Adds two queues together. /// </summary> /// <param name="left">Left side parameter.</param> /// <param name="right">Right side parameter.</param> /// <returns>Joined queue.</returns> /// <example> Example of using the adding 2 queues /// <code title="C#" lang="C#" removeRegionMarkers="true"> /// <code source="..\Examples\RuleCheckingServiceExample.cs" region="QueueAddition_CreateRule" /> /// <code source="..\Examples\RuleCheckingServiceExample.cs" region="QueueAddition_InstantiateService" /> /// <code source="..\Examples\RuleCheckingServiceExample.cs" region="QueueAddition_Validate" /> /// <code source="..\Examples\RuleCheckingServiceExample.cs" region="QueueAddition_CheckErrorsAndReport" /> /// </code> /// </example> public static ValidationErrorStorage operator +(ValidationErrorStorage left, ValidationErrorStorage right) { var newQueue = new ValidationErrorStorage(); foreach (var ruleViolation in left._violations) { newQueue.AddAViolation(ruleViolation); } foreach (var ruleViolation in right._violations) { newQueue.AddAViolation(ruleViolation); } return(newQueue); }
/// <summary> /// Validate the set of rules against the object/value. /// </summary> /// <param name="arg"> /// The object/value being checked. /// </param> /// <returns> /// Queue of rule violations found. /// </returns> /// <example> /// Example of using the RuleCheckingService /// <code title="C#" lang="C#" removeRegionMarkers="true"> /// <code source="..\Examples\RuleCheckingServiceExample.cs" region="VerifyRules_CreateRules"> /// </code> /// <code source="..\Examples\RuleCheckingServiceExample.cs" region="VerifyRules_InstantiateService"> /// </code> /// <code source="..\Examples\RuleCheckingServiceExample.cs" region="VerifyRules_Validate"> /// </code> /// <code source="..\Examples\RuleCheckingServiceExample.cs" region="VerifyRules_CheckErrorsAndReport"> /// </code> /// </code> /// </example> public ValidationErrorStorage Validate(TEntity arg) { var queue = new ValidationErrorStorage(); foreach (var result in this._checks.Select(checkRule => checkRule(arg))) { queue.AddAViolation(result); if (result.Severity == RuleResultSeverity.Fatal) { return(queue); } } return(queue); }