public interface IValidatable
bool ValidateTo(ErrorList errors, params object[] blabla);
public delegate ValidationArgs PreValidationSuccessful();
public class ValidationArgs
public ErrorList ErrorList { get; set; }
public object[] Args { get; set; }
public bool ProcessValidation { get; set; }
public interface IValidatableWithConditions : IValidatable
bool ValidateWithConditions(PreValidationSuccessful preValidationDelegate);
public abstract class ValidatableWithConditions : IValidatableWithConditions
public bool ValidateWithConditions(PreValidationSuccessful preValidationDelegate)
var prereqs = preValidationDelegate.Invoke();
if (prereqs.ProcessValidation)
return this.ValidateTo(prereqs.ErrorList, prereqs.Args);
public abstract bool ValidateTo(ErrorList errors, params object[] blabla);
public class ErrorList { }