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);
}
fluentValidation集成到autofac的更多相关文章
- C# Autofac集成之Framework WebAPI
Web API 2集成需要Autofac.WebApi2 NuGet包. Web API集成需要Autofac.WebApi NuGet包. Web API集成为控制器,模型绑定器和操作过滤器提供了依 ...
- SignalR集成Autofac
SignalR SignalR集成需要 Autofac.SignalR NuGet 包. SignalR 集成提供SignalR 集线器的依赖集成.由于 SignalR 是内部构件,所以不支持Sign ...
- 【译】Dependency Injection with Autofac
先说下为什么翻译这篇文章,既定的方向是架构,然后为了学习架构就去学习一些架构模式.设计思想. 突然有一天发现依赖注入这种技能.为了使得架构可测试.易维护.可扩展,需要架构设计为松耦合类型,简单的说也就 ...
- NopCommerce使用Autofac实现依赖注入
NopCommerce的依赖注入是用的AutoFac组件,这个组件在nuget可以获取,而IOC反转控制常见的实现手段之一就是DI依赖注入,而依赖注入的方式通常有:接口注入.Setter注入和构造函数 ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](九)
前言 童鞋们,大家好 我是专注.NET开发者社区建设的实践者Rector. 首先,为自己间隔了两个星期五再更新本系列文章找个不充分的理由:Rector最近工作,家庭的各种事务所致,希望大家谅解. 本文 ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十)
前言 朋友们, 大家好,我还是Rector,写ASP.NET MVC 5系列文章[一步一步创建ASP.NET MVC5程序Repository+Autofac+Automapper+SqlSugar] ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](十一)
前言 小伙伴们, 大家好,我是Rector. 最近Rector忙于换工作,没有太多时间来更新我们的ASP.NET MVC 5系列文章 [一步一步创建ASP.NET MVC5程序Repository+A ...
- AutoFac简介
在.NET上现在存在许多的依赖注入容器, 如:Castle Windsor.StructureMap.Autofac .Unity. 这里主要介绍一下Autofac,Autofac和其他容器的不同之处 ...
- 关于.NET中的控制反转(三)- 依赖注入之 Autofac
一.Autofac简介 Autofac和其他容器的不同之处是它和C#语言的结合非常紧密,在使用过程中对你的应用的侵入性几乎为零,更容易与第三方的组件集成.Autofac的主要特性如下: 组件侵入性为零 ...
随机推荐
- WPF教程五:布局之Canvas面板
Canvas:画布面板 画布,用于完全控制每个元素的精确位置.他是布局控件中最为简单的一种,直接将元素放到指定位置,主要来布置图面.使用Canvas,必须指定一个子元素的位置(相对于画布),否则所有元 ...
- openfire安装配置完全教程
Java领域的IM解决方案 Java领域的即时通信的解决方案可以考虑openfire+spark+smack. Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端,最新版本是3. ...
- 关于Unity中UI中的Mask组件、Text组件和布局
一.Mask组件 遮罩,Rect Mask矩形Mask(Rect Mask2D组件),图片Mask(Mask组件)(图片Mask的透明度不为0的部分显示子图片,为0的部分不显示子图片) Rect Ma ...
- 【Java面试题】21 Java中的异常处理机制的简单原理和应用。
异常指Java程序运行时(非编译)所发生的非正常情况或错误. java对异常进行了分类,不同类型的异常使用了不同的java类,所有异常的根类为java.lang.Throwable.Throwable ...
- MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption 2017-05-18 16:45
wget "https://raw.githubusercontent.com/rapid7/metasploit-framework/6d81ca42087efd6548bfcf92417 ...
- 基于Bootstrap使用jQuery实现输入框组input-group的添加与删除-改进版
上一次说到了基于Bootstrap使用jQuery实现输入框组input-group的添加与删除 ,初始状态下只有一个输入框组,可以通过点击输入框组的右侧“+”(或自定义的文字)可以在原输入框组的下面 ...
- 利用Sharepoint 创建轻量型应用之基本功能配置!
博客同步课程.假设你想跟着视频学习,请跟着例如以下视频: http://edu.csdn.net/course/detail/2097 1. 点击安装程序,出现的界面先期安装完毕准备工具,准备工具 ...
- mysq对存在null值的字段排序
1.建立学生表,建表sql如下: ),age int); 2.插入几条数据,包括id字段值为null的 ,),(,),(,),(),(); 3.我们查询下,可以看到存在id字段为空的值: 4.对学生表 ...
- /etc/logrotate.conf
/etc/logrotate.conf 是 Logrotate 工具的一个配置文件,这个工具用来自动切割系统日志,Logrotate 是基于 cron 来运行的,如下: [root@localhost ...
- 如何连接 MySQL
操作如下: [root@localhost ~]$ mysql -uroot -p' # 本地连接 MySQL 服务 [root@localhost ~]$ mysql -uroot -p' -h19 ...