zoukankan      html  css  js  c++  java
  • fluentValidation集成到autofac

    废话不说直接上代码

    // 首先实现ValidatorFactory
    
       public class DependencyResolverValidatorFactory : ValidatorFactoryBase
        {
            public override IValidator CreateInstance(Type validatorType)
            { 
                return DependencyResolver.Current.GetService(validatorType) as IValidator;
            }
        }
    
    //配置FluentValidation 
      public class FluentValidationConfig
        {
            public static void ConfigureContainer()
            {
                var factory = new DependencyResolverValidatorFactory();
                ModelValidatorProviders.Providers
                    .Add(new FluentValidationModelValidatorProvider(factory)); 
                DataAnnotationsModelValidatorProvider
                    .AddImplicitRequiredAttributeForValueTypes = false;
                ValidatorOptions.ResourceProviderType = typeof(ValidationResources);
                ValidatorOptions.CascadeMode = CascadeMode.StopOnFirstFailure; 
            }
        }
    //在autofac中注册继承自AbstractValidator的验证类
    
               AssemblyScanner
                    .FindValidatorsInAssemblyContaining<AddressValidator>()
                   .ForEach(x => builder.RegisterType(x.ValidatorType).As(x.InterfaceType).SingleInstance());
                   
        //该类所在程序集内的所有继承自AbstractValidator的验证类都会被注册到autofac容器内
        public class AddressValidator : AbstractValidator<Address>
        {
            public AddressValidator ()
            {
                RuleFor(x => x.Name).NotEmpty().WithLocalizedName(()=>"收件人");
                RuleFor(x => x.Email).NotEmpty().EmailAddress();
                RuleFor(x => x.Mobile).NotEmpty().Mobile();
            }
        }

    fluentValidation集成到autofac的好处

    //如果fluentValidation不使用autofac容器,那么需要在每个asp.net mv action中调用
    Address address = new Address();
    AddressValidator validator = new AddressValidator(); 
    ValidationResult results = validator.Validate(address);
    
    //或者
    
    [Validator(typeof(AddressValidator))]//此行是重点
        public class Address
        {
            public string Name { get; set; }
            public string Mobile { get; set; }
            public string Email { get; set; }
            public string Details { get; set; }
        }
    //用了autofac 上面两种都不需要,在action像没有用到fluentvalidation那样直接:
          if (!ModelState.IsValid)
                {
                    return View(model);
                }
  • 相关阅读:
    如何评测软件工程知识技能水平?
    创新产品的需求分析:未来的图书会是什么样子?
    案例分析:设计模式与代码的结构特性
    业务领域建模Domain Modeling
    转载:10 Easy Steps to a Complete Understanding of SQL
    二十六个月Android学习工作总结
    android sdk无法更新问题解决
    android中利用view画出一条竖线
    android-Java SoftReference,WeakReference,Direct Reference简介
    Intellij IDEA开发第一个android应用教程
  • 原文地址:https://www.cnblogs.com/wuya/p/3505435.html
Copyright © 2011-2022 走看看