我正在尝试为主要应用程序选择一个验证框架,虽然这两个选项看起来很诱人,但我想知道在承诺之前是否有任何具体的利弊我应该知道.
我在尝试使用企业库验证应用程序块时遇到以下异常:
创建用于验证的配置节处理程序时出错:无法加载文件或程序集"Microsoft.Practices.EnterpriseLibrary.Validation,Version = 4.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(来自HRESULT的异常:0x80131040)(C:\ Documents and Settings\My Documents\Visual Studio 2008\Projects\Testers\TestProject\web.config第12行)
我知道异常试图告诉我什么,但我无法弄清楚如何解决它.我只安装了一个版本的企业库,这就是它(4.1.0.0),所以我看不出它是如何找到错误的版本,所以我想它是一个依赖问题.我已经从企业库4.1中包含了"Common","Validation"和"ObjectBuilder2"DLL作为项目中的参考,所以我不确定我还缺少什么.文档肯定似乎表明这就是我所需要的.
有没有办法找出依赖问题是什么?
如果有帮助,我尝试使用企业库配置工具创建验证应用程序块规则集,以验证实体框架实体中的数据.我在Visual Studio 2008中使用ASP.NET MVC.
感谢您提供的任何帮助/指导,
克里斯
Validation.Validate()验证应用程序块的方法是否可以将IParameterCollectionUnity提供的每个参数视为我的自定义UserModel?
我试图使用Unity和验证应用程序块来验证方法参数.
我希望能够[RequiresValidation()]用适当的验证属性表示方法和该方法的参数.
所以,像这样:
[RequiresValidation()]
public void SaveUser(UserModel user)
{
// ...
}
public class UserModel
{
[StringLengthValidator(3, 255)]
[RegexValidator(@"^[a-zA-Z0-9]${3,255}")]
public string Name { get; set; }
[StringLengthValidator(0, 255)]
[RegexValidator(@"\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b")]
public string EMail { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我已经创建了一个自定义HandlerAttribute,它将启动对验证处理程序的调用,如图所示.
public class RequiresValidationAttribute : HandlerAttribute
{
public override ICallHandler CreateHandler(IUnityContainer container)
{
return new ValidationCallHandler();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,验证处理程序将尝试验证方法的每个参数:
public class ValidationCallHandler : ICallHandler
{
public int Order { get; set; }
public …Run Code Online (Sandbox Code Playgroud) c# validation enterprise-library unity-container validation-application-bl
脚本
.NET/WPF桌面应用程序应本地化(或以MS术语全球化)使用与英语不同的语言.也就是说,UI需要完全采用(标签,图标......).
但是,日志文件条目,审计跟踪条目和应用程序的其他输出应保留为英语,以便英语服务/支持人员对其进行审核.他们不会讲法语或中文.
该应用程序依赖于RESX文件来完成本地化.
企业库验证块用于验证对象模型上的业务规则.
现在假设有一个服务在执行实际业务逻辑之前验证其给定的对象模型参数.在某些情况下,它会收到无效的对象模型参数,但会尽最大努力继续执行.但是,应在审计跟踪和日志文件中记录无效对象模型数据的提供.
使用验证块的服务示例.
public class Service : IService
{
public void MyMethod(MyObjectModelObject obj)
{
Validator validator = ValidationFactory.CreateValidator(typeof(MyObjectModelObject));
ValidationResults results = validator.Validate(this);
// !!! The messages in the validation results are now already localized to CurrentCulture.
// ... build a log message: msg
if (results.Count > 0)
{
Logger.Log(msg);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如代码注释中所述,当您在EnterpriseLibrary验证程序上调用Validate()时,验证消息已经本地化为法语,您没有机会将它们写入例如英语日志文件.
在我们的应用程序的其他方面,我们使用一个消息类来封装资源ID和参数,直到我们确定我们想要使用哪种文化来解析实际的字符串值.您可以将其称为延迟资源解析.
有关如何将相似机制引入企业库验证块的任何想法?目前为止的想法:
感谢您的帮助和分享想法!
.net globalization enterprise-library localization validation-application-bl
我想在我的域模型中添加验证器属性(在ASP.NET MVC应用程序中),我正在尝试在2个框架,验证应用程序块和DataAnnotations之间做出决定.他们似乎做了类似的任务,所以我想选择将来最受支持/使用的任务.似乎DataAnnotations是更新的(并且在3.5 SP1中构建到框架中),那么人们认为验证应用程序块将变得过时吗?
[标记为社区维基,因为这是主观的]