ho una classe astratta denominata Validator:di sviluppo per creare classi generiche
public abstract class Validator<T> where T : IValidatable
{
public abstract bool Validate(T input);
}
E ho alcune implementazioni concrete. Uno è AccountValidator:
public class AccountCreateValidator : Validator<IAccount>
{
public override bool Validate(IAccount input)
{
//some validation
}
}
Un'altra potrebbe essere LoginValidator:
public class LoginValidator : Validator<IAccount>
{
public override bool Validate(IAccount input)
{
//some different validation
}
}
Ora voglio creare una fabbrica per restituire l'un'istanza di un'implementazione validatore. Qualcosa di simile:
public static class ValidatorFactory
{
public static Validator GetValidator(ValidationType validationType)
{
switch (validationType)
{
case ValidationType.AccountCreate:
return new AccountCreateValidator();
}
}
}
Mi piacerebbe poi piace fare chiamarlo come
Validator myValidator = ValidatorFactory.GetValidator(ValidationType.AccountCreate);
Tuttavia non piace il ritorno nuova AccountCreateValidator() la linea, o il fatto che sto dichiarando MyValidator come Validatore e non Validator<SomeType>
. Qualsiasi aiuto sarebbe apprezzato.
Il codice che hai è attualmente non valido - la fine del metodo è raggiungibile. Si prega di mostrare un programma breve ma completo che mostri il problema. –
Non sarebbe meglio ottenere un validatore basato sul tipo di IValidatable piuttosto che basato su un Enum? Quindi è possibile restituire un 'Validator' e prendere un 'T' nel metodo' GetValidator' e 'T' potrebbe essere limitato ad essere di' IValidatable' –
'Validator dove T: IValidatable', non è quello che si vuoi solo 'class Validator: IValidatable'? –
vulkanino