【发布时间】:2009-02-09 18:00:55
【问题描述】:
Castle Validator 使用属性来指定验证规则。您如何将这些与 Subsonic 生成的类(或您无法定义属性的任何类)连接起来?有没有办法在不使用属性方法的情况下以编程方式指定验证规则?
【问题讨论】:
标签: validation subsonic castle
Castle Validator 使用属性来指定验证规则。您如何将这些与 Subsonic 生成的类(或您无法定义属性的任何类)连接起来?有没有办法在不使用属性方法的情况下以编程方式指定验证规则?
【问题讨论】:
标签: validation subsonic castle
我认为最好的方法是使用MetadataType。
这是一个DataAnnotations,让您的班级拥有一对或类似的东西。我不知道如何更好地解释它,让我们来看看示例:
您首先需要将此指令添加到您的代码中:
using System.ComponentModel.DataAnnotations;
你应该创建你生成的类的部分类,并指定这个类有一个MetadataType:
[MetadataType(typeof(UserMetadata))]
public partial class User
{
}
然后您使用城堡验证创建元数据类:
public class UserMetadata
{
[ValidateNonEmpty]
[ValidateLength(6, 24)]
public string Username { get; set; }
[ValidateNonEmpty]
[ValidateLength(6, 100)]
[ValidateEmail]
public string Email { get; set; }
[ValidateNonEmpty]
[ValidateLength(6, 24)]
public string Password { get; set; }
}
【讨论】:
有几种方法可以做到这一点 - 属性是摩擦最小的选项,但显然不能很好地处理生成的代码或更好地在代码中表达的多个属性的验证。
请查看以下链接以获取有关如何执行此博文的一些指示:Castle Validator Enhancements
如果您查看城堡源代码,这些是一些很好的起点:
【讨论】: