Почему бы вам не использовать FluentValidation ? Вы можете легко создавать собственные валидаторы, например, то, что вам нужно, а также существует несколько предопределенных валидаторов.
Что вы хотите в FluentValidation: Когда / Если условие:
RuleFor(m => m.FirstName).NotEmpty().When(m => string.IsNullOrEmpty(m.LastName));
или
RuleFor(m => m.LastName).NotEmpty().Unless(m => !string.IsNullOrEmpty(m.FirstName));
Если вам нужны валидаторы атрибутов, вы можете взглянуть на FoolProof , чтобы понять эту идею.