public BusinessSpecResult IsSatisfiedBy(T bo) { if (bo == null) { throw new ArgumentNullException(nameof(bo)); } var taskFactory = new TaskFactory(); var firstSpecTask = taskFactory.StartNew(() => { return(_first.IsSatisfiedBy(bo)); }); var secondSpecTask = taskFactory.StartNew(() => { return(_second.IsSatisfiedBy(bo)); }); var firsResult = firstSpecTask.Result; var secondResult = secondSpecTask.Result; var statusList = new BusinessResultStatus[] { firsResult.Status, secondResult.Status }; var isSatisfied = firsResult.IsSatisfied || secondResult.IsSatisfied; var status = BusinessResultStatus.Success; if (isSatisfied) { status = statusList .Where(s => s < BusinessResultStatus.InvalidInputs) .OrderBy(s => s) .First(); } else { status = statusList .Where(s => s >= BusinessResultStatus.InvalidInputs) .OrderBy(s => s) .First(); } return(new BusinessSpecResult ( isSatisfied: firsResult.IsSatisfied || secondResult.IsSatisfied, status: status, messages: firsResult.Messages.Concat(secondResult.Messages) )); }
/// <summary> /// Constructor with empty messages /// </summary> /// <param name="isSatisfied"></param> /// <param name="status"></param> public BusinessSpecResult(bool isSatisfied, BusinessResultStatus status) : this(isSatisfied, status, new BusinessSpecMessage[0]) { }
/// <summary> /// Full constructor /// </summary> /// <param name="isSatisfied"></param> /// <param name="status"></param> /// <param name="messages"></param> public BusinessSpecResult(bool isSatisfied, BusinessResultStatus status, IEnumerable <BusinessSpecMessage> messages) { IsSatisfied = isSatisfied; Status = status; Messages = messages.ToList(); }
/// <summary> /// Full constructor /// </summary> /// <param name="status"></param> /// <param name="message"></param> public BusinessSpecMessage(BusinessResultStatus status, string message) { Status = status; Message = message; }
/// <summary> /// Constructor with default ResultId and empty message list /// </summary> /// <param name="status"></param> public BusinessCommandResult(BusinessResultStatus status) : this(Guid.NewGuid(), status, new string[0]) { }
/// <summary> /// Constructor for results with default ResultId and single message /// </summary> /// <param name="status"></param> /// <param name="message"></param> public BusinessCommandResult(BusinessResultStatus status, string message) : this(Guid.NewGuid(), status, new string[] { message }) { }
/// <summary> /// Constructor with default resultId /// </summary> /// <param name="status"></param> /// <param name="messages"></param> public BusinessCommandResult(BusinessResultStatus status, IEnumerable <string> messages) : this(Guid.NewGuid(), status, messages) { }
/// <summary> /// Full constructor /// </summary> /// <param name="resultId"></param> /// <param name="status"></param> /// <param name="messages"></param> public BusinessCommandResult(Guid resultId, BusinessResultStatus status, IEnumerable <string> messages) { ResultId = resultId; Status = status; Messages = messages.ToList(); }