public abstract class Animal , IValidatableObject
{
public string Id {get;set;}
public string Name {get;set;}
public virtual IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (this.Name == "animal")
{
yield return new ValidationResult("Invalid Name From base", new[] { "Name" });
}
}
}
public class Dog: Animal, IValidatableObject
{
public string Owner {get;set;}
public override IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
/*
Here call base validate
*/
if (this.Name == "dog")
{
yield return new ValidationResult("Invalid Name From dog", new[] { "Name" });
}
}
}
我有一个实现Animal
的基类IValidatableObject
,现在来自Dog
子类的Validate
方法,它也实现了IValidatableObject
,我想调用基类的Validate
方法。
我尝试过(它没有调用基类的验证)
base.Validate(validationContext);
答案 0 :(得分:9)
在您的代码示例中,您没有从Animal派生您的狗类。 只有在迭代时才会调用动物的验证方法 通过结果集:
public class Dog : Animal
{
public override IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
foreach(var result in base.Validate(validationContext))
{
}
//dog specific validation follows here...
}
}
只调用base.Validate()而不迭代返回的集合 不要调用base的验证方法。 希望,这有帮助。
答案 1 :(得分:0)
ToList()
您需要调用IEnumerable
,因为基本方法返回<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="AppConsole" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.err" />
<param name="Encoding" value="ISO-8859-15" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{dd.MM.yyyy HH:mm:ss} %5p kontext.%c{1}:%L - %m%n" />
</layout>
</appender>
<root>
<level value="debug" />
<appender-ref ref="AppConsole" />
</root>
</log4j:configuration>
类型数据