asp.net-mvc-3 – 如何在.NET MVC3中注入用于验证的依赖关系?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc-3 – 如何在.NET MVC3中注入用于验证的依赖关系?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有很多验证方法需要访问存储库/数据库来完成工作.到目前为止,我们一直使用服务定位器模式(尽管谨慎)在自定义ValidationAttributes中实现:
public override bool IsValid(object value)
{
    // use custom service locator in our app's infrastructure
    var repos = DependencyInjector.Current.GetService<IXyzRepository>();
    ...
}

我知道这是(作为一个反模式,我们想使用一个更正确的方法,我们使用统一,我读了this post that says to use a build-up method.但是the link in the accepted answer说文档已经过时了(退休内容).

解决方案不需要使用验证属性,我想它可以使用IValidatableObject,但是问题依然存在:如何将依赖项注入到模型中.我们需要一个自定义模型binder来做到这一点吗?

另一个解决方案是在控制器中执行验证,其中依赖注入很容易.对我来说,这感觉很混乱.我想让模型在到达action方法的时候被验证.

另外我们有时候使用[RemoteAttribute]在客户端上执行这些验证.目前,这些方法通过使用静态Validator.TryValidateObject方法构建视图模型并将验证委托给模型.

您如何完成验证,需要注入的依赖关系来完成其工作,而不使用SL反模式?

解决方法

How have you accomplished validation that requires an injected
dependency to do its work,without using the SL anti-pattern?

我使用FluentValidation.NET在我的应用程序中执行验证.它允许我将inject dependencies加入我的验证器.它有一个非常好的integration with ASP.NET MVC.它还支持自动客户端验证的标准规则,就像数据注释使用jquery unobtrusive验证一样:

> NotNull / NotEmpty
>匹配(正则表达式)
>包容性(范围)
>信用卡
>电子邮件
> EqualTo(交叉属性等价比较)
>长度

我从来没有使用数据注释来执行验证.当您需要处理一些更复杂的验证场景,您需要验证依赖属性甚至使用某些服务时,它们绝对没有用.我在前一句话中用斜体字复杂,因为我认为validating that one of the 2 properties是不是必须的,是一个非常复杂的验证场景,但是,只需检查您必须编写的基础设施垃圾数量,才能使用数据注释实现.看这个代码,你不再知道你正在验证什么.

原文链接:https://www.f2er.com/aspnet/250948.html

猜你在找的asp.Net相关文章