2012-03-26 3 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 используется в контексте model2, он выбрасывает исключение при литье в Model1

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; 
    } 
} 
Смежные вопросы