コード例 #1
0
 public Engine(IInvokerRegistry invokerRegistry, IErrorResolver errorResolver)
 {
     if (invokerRegistry == null) throw new System.ArgumentNullException("invokerRegistry");
     if (errorResolver == null) throw new System.ArgumentNullException("errorResolver");
     _errorResolver = errorResolver;
     _invokerRegistry = invokerRegistry;
 }
コード例 #2
0
        public string GetErrorMessage(IErrorResolver resolver, string propertyName, object value)
        {
            if (resolver == null)
            {
                throw new ArgumentNullException("resolver");
            }

            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            if (propertyName == null)
            {
                throw new ArgumentNullException("propertyName");
            }

            var exp = this.CreatePropertyExpression(propertyName, value);

            ValidationError[] validationErrors;
            if (this.HasError(exp, value, out validationErrors))
            {
                return(resolver.GetErrorMessage(validationErrors[0]));
            }

            return(null);
        }
コード例 #3
0
        public string[] GetErrorMessages(object value, IErrorResolver errorResolver)
        {
            if (errorResolver == null)
            {
                throw new System.ArgumentNullException("errorResolver");
            }
            if (value == null)
            {
                throw new System.ArgumentNullException("value");
            }
            var result = new List <string>();
            Dictionary <EquatableExpression, List <ValidationError> > errorsOnValue;

            if (!_errors.TryGetValue(value, out errorsOnValue))
            {
                return(new string[0]);
            }
            foreach (var expression in errorsOnValue.Keys)
            {
                foreach (var errorOnExpression in errorsOnValue[expression])
                {
                    var message = errorResolver.GetErrorMessage(errorOnExpression.Value.GetType(), errorOnExpression.Expression, errorOnExpression.Rule, errorOnExpression.ValidationArguments);
                    if (message == null)
                    {
                        continue;
                    }
                    result.Add(message);
                }
            }
            return(result.ToArray());
        }
コード例 #4
0
 public WorkTimeService(IConsoleLogger consoleLogger, IValidationService validationService,
                        IErrorResolver errorResolver)
 {
     _consoleLogger     = consoleLogger;
     _validationService = validationService;
     _errorResolver     = errorResolver;
 }
コード例 #5
0
ファイル: HttpPipeline.cs プロジェクト: VallanDeMorty/phaber
 public HttpPipeline(
     ISerializer serializer,
     IErrorResolver <HttpResponseMessage> errorResolver
     )
 {
     _serializer    = serializer;
     _errorResolver = errorResolver;
 }
コード例 #6
0
ファイル: HttpPipeline.cs プロジェクト: VallanDeMorty/phaber
 public HttpPipeline(
     IErrorResolver <HttpResponseMessage> errorResolver
     ) : this(
         new JsonSerializer(),
         errorResolver
         )
 {
 }
コード例 #7
0
ファイル: RulesEngine.cs プロジェクト: jmptrader/RulesEngine
 /// <summary>
 /// Creates a Rules Engine.
 /// </summary>
 /// <param name="basedOn">Copies rules from base Engine</param>
 public Engine(Engine basedOn)
 {
     if (basedOn == null)
     {
         throw new System.ArgumentNullException("basedOn");
     }
     _registry             = basedOn._registry.Clone();
     _defaultErrorResolver = basedOn._defaultErrorResolver.Clone();
 }
コード例 #8
0
        public string[] GetErrorMessages(IErrorResolver errorResolver)
        {
            if (errorResolver == null)
            {
                throw new System.ArgumentNullException("errorResolver");
            }
            object[] errorObjects = _errors.Keys.ToArray();
            var      result       = errorObjects.SelectMany(o => GetErrorMessages(o, errorResolver)).ToArray();

            return(result);
        }
コード例 #9
0
 public MvcValidationReport(ModelStateDictionary modelState, IErrorResolver errorResolver)
 {
     if (errorResolver == null)
     {
         throw new System.ArgumentNullException("errorResolver");
     }
     if (modelState == null)
     {
         throw new System.ArgumentNullException("modelState");
     }
     Initialize(modelState, null, errorResolver);
 }
コード例 #10
0
        public ValidationServiceTests()
        {
            var errorResolver = Substitute.For <IErrorResolver>();

            var serviceProvider = new ServiceCollection()
                                  .AddSingleton(s => errorResolver)
                                  .AddSingleton <IValidationService, ValidationService>()
                                  .BuildServiceProvider();

            _errorResolver     = errorResolver;
            _validationService = serviceProvider.GetService <IValidationService>();
        }
コード例 #11
0
 public Engine(IInvokerRegistry invokerRegistry, IErrorResolver errorResolver)
 {
     if (invokerRegistry == null)
     {
         throw new System.ArgumentNullException("invokerRegistry");
     }
     if (errorResolver == null)
     {
         throw new System.ArgumentNullException("errorResolver");
     }
     _errorResolver   = errorResolver;
     _invokerRegistry = invokerRegistry;
 }
コード例 #12
0
        public static IActionResult Enrol(
            [HttpTrigger(AuthorizationLevel.Anonymous, "Post", Route = "users")] HttpRequest req,
            [Inject] IErrorResolver <UserError, IActionResult> errorResolver,
            [Inject] IUserPipelines pipelines)
        {
            var response = pipelines.EnrolUser.Handle(req);

            if (response.IsSuccess)
            {
                return(new OkObjectResult(response.Success));
            }

            return(response.Error.ToActionResult(errorResolver.Resolve));
        }
コード例 #13
0
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "packages")] HttpRequest req,
            [Inject] IErrorResolver <AuditError, IActionResult> auditErrorResolver,
            [Inject] IPackagePipelines packagePipelines)
        {
            var pipeline = packagePipelines.AuditPackages;
            var response = pipeline.Handle(req);

            if (response.IsSuccess)
            {
                return(new OkObjectResult(response.Success));
            }

            return(response.Error.ToActionResult(auditErrorResolver.Resolve));
        }
コード例 #14
0
        public string GetErrorMessage(IErrorResolver resolver, string propertyName, object value)
        {
            if (resolver == null) throw new System.ArgumentNullException("resolver");
            if (value == null) throw new System.ArgumentNullException("value");
            if (propertyName == null) throw new System.ArgumentNullException("propertyName");
            var exp = CreatePropertyExpression(propertyName, value);

            ValidationError[] validationErrors;

            if (base.HasError(exp, value, out validationErrors))
            {
                return resolver.GetErrorMessage(validationErrors[0]);
            }

            return null;
        }
コード例 #15
0
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "Post", Route = "keys")] HttpRequest req,
            [Inject] IErrorResolver <KeyError, IActionResult> errorResolver,
            [Inject] IKeyPipelines pipelines)
        {
            var pipeline = pipelines.GenerateKey;
            var response = pipeline.Handle(req);

            if (response.IsSuccess)
            {
                return(new OkObjectResult(new KeyResponse  {
                    Name = response.Success.Name, Value = response.Success.Value
                }));
            }

            return(response.Error.ToActionResult(errorResolver.Resolve));
        }
コード例 #16
0
        private void Initialize(ModelStateDictionary modelState, Engine engine, IErrorResolver errorResolver)
        {
            _modelState = modelState;
            _engine     = engine;

            //NOTE: errorResolver and engine cannot be null at the same time (see constructors)
            if (errorResolver == null)
            {
                _errorResolver = engine.DefaultErrorResolver;
            }
            else
            {
                _errorResolver = errorResolver;
            }

            CreateInnerReport();
        }
コード例 #17
0
        public WorkTimeServiceTests()
        {
            var errorResolver     = Substitute.For <IErrorResolver>();
            var validationService = Substitute.For <IValidationService>();

            var serviceProvider = new ServiceCollection()
                                  .AddSingleton(s => errorResolver)
                                  .AddSingleton(s => validationService)
                                  .AddSingleton <IWorkTimeService, WorkTimeService>()
                                  .AddSingleton <IConsoleLogger, ConsoleLogger>()
                                  .BuildServiceProvider();

            _errorResolver     = errorResolver;
            _validationService = validationService;
            _workTimeService   = serviceProvider.GetService <IWorkTimeService>();

            _path = GetApplicationRoot();
        }
コード例 #18
0
        public ChainedErrorResolver(
            IErrorResolver <T> resolver,
            params IErrorResolver <T>[] resolvers
            )
        {
            _resolver = resolver;

            if (resolvers.Length > 0)
            {
                _chain = Option.Some <IErrorResolver <T> >(
                    new ChainedErrorResolver <T>(
                        resolvers.First(),
                        resolvers.Skip(1).ToArray()
                        ));
            }
            else
            {
                _chain = Option.None <IErrorResolver <T> >();
            }
        }
コード例 #19
0
ファイル: RulesEngine.cs プロジェクト: jmptrader/RulesEngine
        /// <summary>
        /// Creates a Rules Engine.
        /// </summary>
        /// <param name="basedOn">Copies specific rules from base Engine</param>
        /// <param name="types">Copies rules for the specified types only.</param>
        public Engine(Engine basedOn, params Type[] types)
        {
            if (types == null)
            {
                throw new System.ArgumentNullException("types");
            }
            if (basedOn == null)
            {
                throw new System.ArgumentNullException("basedOn");
            }
            _defaultErrorResolver = basedOn._defaultErrorResolver.Clone();
            var registry = basedOn._registry.Clone();

            foreach (var type in types)
            {
                var invokers = registry.GetInvokers(type);
                foreach (var invoker in invokers)
                {
                    _registry.RegisterInvoker(invoker);
                }
            }
        }
コード例 #20
0
 public string GetErrorMessage <T, R>(T value, Expression <Func <T, R> > expression, IErrorResolver resolver)
 {
     return(GetErrorMessage(value, new EquatableExpression(expression), resolver));
 }
コード例 #21
0
 private void SetErrorMessage <T, R>(IErrorResolver resolver, Expression <Func <T, R> > expression, IRule rule, string message)
 {
     resolver.SetErrorMessageFor(typeof(T), new EquatableExpression(expression), rule, message);
 }
コード例 #22
0
        public string GetErrorMessage(object value, EquatableExpression expression, IErrorResolver resolver)
        {
            //NOTE: Expression can be null.
            if (value == null)
            {
                throw new System.ArgumentNullException("value");
            }
            if (resolver == null)
            {
                throw new System.ArgumentNullException("resolver");
            }

            ValidationError[] errors;
            ValidationError   error;

            object[] validationArguments = new object[0];

            if (this.HasError(value, expression, out errors))
            {
                error = errors[0];
                validationArguments = error.ValidationArguments;
                var message = resolver.GetErrorMessage(error.Value.GetType(), error.Expression, error.Rule, error.ValidationArguments);
                return(message);
            }
            else if (expression != null && expression.Expression.ReturnType.IsClass && expression.Expression.ReturnType != typeof(string))
            {
                //There may be the case that for compositions, a message is set for CallValidate(). When
                //this happens, there won't be any error for a => a.C (where 'C' is another object)
                //still, you would like to have a 'C is not valid' message...

                //Step 1: find out if there are any Messages defined for that property
                var message = resolver.GetErrorMessage(value.GetType(), expression, null, new object[0]);
                //if null fallback on message for the type of that property.
                if (message == null)
                {
                    message = resolver.GetErrorMessage(expression.Expression.ReturnType, null, null, new object[0]);
                }
                if (message == null)
                {
                    return(null);
                }

                //Step 2: There is a Message defined. Find out if there is an error for the property.
                object propertyValue = null;
                try
                {
                    //TODO: This should be resolved using a Interface maybe.
                    propertyValue = expression.Expression.Compile().DynamicInvoke(value);
                }
                catch (NullReferenceException)
                {
                    //NOTE: Swallow all NullReferenceException.
                }
                catch (Exception ex)
                {
                    //Wrap and re-throw.
                    throw new InvalidOperationException(string.Format("Could not get property value for expression {0}. See InnerException for details.", expression.Expression), ex);
                }
                if (propertyValue == null)
                {
                    return(null);
                }

                //Step 3: The property may be an IEnumerable. Need to return the message if any elements has an error...
                //TODO: This is bit dodgy, you should only enumerate if a CallValidateForEach was used...
                //Return null if none of the propertyValue(s) have errors.
                if (ToEnumerable(propertyValue).All(v => !HasError(v, null)))
                {
                    return(null);
                }
                return(message);
            }

            return(null);
        }
コード例 #23
0
ファイル: RulesEngine.cs プロジェクト: jmptrader/RulesEngine
 public Engine()
 {
     _defaultErrorResolver = new DefaultErrorResolver();
 }
コード例 #24
0
 public string GetErrorMessage <T, R>(T value, System.Linq.Expressions.Expression <Func <T, R> > expression, IErrorResolver resolver)
 {
     return(_innerReport.GetErrorMessage <T, R>(value, expression, resolver));
 }
コード例 #25
0
 public string[] GetErrorMessages(object value, IErrorResolver errorResolver)
 {
     return(_innerReport.GetErrorMessages(value, errorResolver));
 }
コード例 #26
0
 private void SetErrorMessage <T, R>(IErrorResolver resolver, Expression <Func <T, R> > expression, IRule rule, string message)
 {
     resolver.AddEntry(new MessageEntry(typeof(T), new EquatableExpression(expression), rule, () => message));
 }
コード例 #27
0
 public ValidationService(IErrorResolver errorResolver)
 {
     _errorResolver = errorResolver;
 }
コード例 #28
0
 public ExceptionHandler(IErrorResolver errorResolver)
 {
     this._errorResolver = errorResolver;
 }
コード例 #29
0
 public string GetErrorMessage <T, R>(T value, Expression <Func <T, R> > expression, IErrorResolver resolver)
 {
     throw new NotImplementedException();
 }
コード例 #30
0
 public string GetErrorMessage(object value, EquatableExpression expression, IErrorResolver resolver)
 {
     throw new NotImplementedException();
 }