Вам не нужны отдельные интерфейсы, если вы не хотите. Было бы вполне приемлемо иметь оба метода Validate и Upload в одном интерфейсе.
Кроме того, если вы хотите заставить потребителя сначала вызвать validate, то вы можете вернуть «ключ» Guid из метода Validate, а затем заставить получателя передать этот ключ в метод загрузки. Нет ключа загрузки, нет загрузки. Даже при таком подходе вы захотите пройти повторную проверку при загрузке.
Итак, ваш метод проверки может выглядеть примерно так:
public string Validate(string fileName)
{
string uploadKey = null;
bool isValid = false;
//Business logic
if (isValid)
{
uploadKey = Guid.NewGuid().ToString();
//store uploadKey
}
return uploadKey;
}