Добавьте виртуальный метод к базовому классу.
Если вы хотите выполнить некоторую общую логику проверки в базовом классе, а также выполнить дополнительную логику проверки в каждой из конкретных реализаций, то добавьте метод виртуальной проверки в ваш базовый класс, который вызывается в функции проверки базового класса.
Добавить в базовый класс:
public abstract class BoardAbstractBase {
...
protected virtual bool RepoValidate() {
return true;
}
...
}
Затем в каждой конкретной реализации реализуйте RepoValidate
с любой необходимой вам логикой проверки, например protected override bool RepoValidate() {...}
.
Например
public class Board : BoardAbstractBase, IValidatableObject
{
...
protected override bool RepoValidate() {
return this.BoardId == "";
}
...
}
Затем в BoardAbstractBase.Validate
:
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (!(EstimatedStartDate < EstimatedEndDate))
yield return new ValidationResult(
"StartDateBeforeEndDate|The estimated start date should be smaller than the end date.",
new[] {"BoardAbstractBase"});
if (!this.RepoValidate()){ ... }
}
Теперь вы всегда можете изменить RepoValidate
, чтобы он возвращал результат проверки, если он потерпел неудачу, или принимает какой-либо аргумент, но просто для примера, этот просто возвращает false. Кроме того, поскольку это virtual
, а не abstract
, вам нужно переопределить его, только когда у вас есть дополнительная настраиваемая логика для выполнения.