代码之家  ›  专栏  ›  技术社区  ›  Kevin Pang

如何将Castle验证器用于亚音速生成的类?

  •  2
  • Kevin Pang  · 技术社区  · 16 年前

    Castle验证程序使用属性指定验证规则。如何将这些与亚音速生成的类(或无法定义其属性的任何类)连接起来?是否有一种方法可以在不使用属性方法的情况下通过程序指定验证规则?

    2 回复  |  直到 16 年前
        1
  •  2
  •   homemdelata    16 年前

    我认为最好的方法是使用 MetadataType . 这是一个 DataAnnotations 那就让你的课有一双或类似的。我不知道如何更好地解释它,所以,让我们来看看样本:

    首先需要将此指令添加到代码中:

    using System.ComponentModel.DataAnnotations;
    

    您应该使用一个属性创建您生成的类的分部类,该属性指定该类具有 元类型 :

    
    [MetadataType(typeof(UserMetadata))] 
    public partial class User
    {
    }
    
    

    然后用Castle验证创建元数据类:

    
    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; }
    }
    

    希望它有帮助

        2
  •  0
  •   Bittercoder    16 年前

    有几种方法可以做到这一点——属性是摩擦最小的选项,但显然不能很好地处理生成的代码或验证代码中更好地表示的多个属性。

    查看以下链接,了解如何撰写此博客文章的一些指示: Castle Validator Enhancements

    如果您了解Castle源代码,那么这些是一些很好的起点:

    希望有帮助。