2012-03-26 90 views
1

我有一个使用自定义验证器的模型类,如下面的代码所示。如何在两个不同的模型中使用相同的验证器

public class Model1 
{ 
    [ApplicationIdentifierValidator()] 
    public Guid ApplicationIdentifier { get; set; } 

    public string ApplicationName { get; set; } 
    public string ApplicationType { get; set; } 
} 

public class ApplicationIdentifierValidator: ValidationAttribute 
{ 
    public ApplicationIdentifierValidator() { } 

    protected override ValidationResult IsValid(object value, ValidationContext context) 
    { 
     Model1 model = (Model1)(context.ObjectInstance); 
     Guid ApplicationIdentifier = model.ApplicationIdentifier; 

     // Validate ApplicationIdentifier value 

     return ValidationResult.Success; 
    } 
} 

现在我添加了另一个模型类,需要使用相同的验证器。

public class Model2 
{ 
    [ApplicationIdentifierValidator()] 
    public Guid ApplicationIdentifier { get; set; } 

    public Guid SystemIdentifier { get; set; } 
} 

问题是,当ApplicationIdentifierValidator在模型2的情况下被使用,它铸造模型1

Model1 model = (Model1)(context.ObjectInstance); 

任何想法可能是更好的方法来重复使用相同的验证时抛出异常?

回答

1

你可以使用继承。基本的OO设计应该满足您的确切需求。 通过让您的两个模型从ModelBase继承,您的验证代码可以将该对象转换为ModelBase并使用共享属性。

abstract class ModelBase{ 
    [ApplicationIdentifierValidator()] 
    public Guid ApplicationIdentifier { get; set; } 
} 

class Model1: ModelBase{ 
public string ApplicationName { get; set; } 
public string ApplicationType { get; set; } 
} 

class Model2: ModelBaes{ 
    public Guid SystemIdentifier { get; set; } 
} 

public class ApplicationIdentifierValidator: ValidationAttribute 
{ 
    public ApplicationIdentifierValidator() { } 

    protected override ValidationResult IsValid(object value, ValidationContext context) 
    { 
     ModelBase model = (ModelBase)(context.ObjectInstance); 
     Guid ApplicationIdentifier = model.ApplicationIdentifier; 

     // Validate ApplicationIdentifier value 

     return ValidationResult.Success; 
    } 
} 
相关问题