tengo una clase abstracta llamada Validador:fábrica para crear clases genéricas
public abstract class Validator<T> where T : IValidatable
{
public abstract bool Validate(T input);
}
Y tengo algunas implementaciones concretas. Una de ellas es AccountValidator:
public class AccountCreateValidator : Validator<IAccount>
{
public override bool Validate(IAccount input)
{
//some validation
}
}
Otra sería LoginValidator:
public class LoginValidator : Validator<IAccount>
{
public override bool Validate(IAccount input)
{
//some different validation
}
}
ahora quieren crear una fábrica para devolver la una instancia de una aplicación validador. Algo así como:
public static class ValidatorFactory
{
public static Validator GetValidator(ValidationType validationType)
{
switch (validationType)
{
case ValidationType.AccountCreate:
return new AccountCreateValidator();
}
}
}
me gusta hacer a continuación, llamar así
Validator myValidator = ValidatorFactory.GetValidator(ValidationType.AccountCreate);
Sin embargo, no le gusta el retorno nueva AccountCreateValidator() de la línea, o el hecho de que estoy declarando como miValidador Validador y no Validator<SomeType>
. Cualquier ayuda sería apreciada.
El código que tiene actualmente no es válido: se puede acceder al final del método. Por favor, muestre un programa breve pero completo que demuestre el problema. –
¿No sería mejor que obtuviera un validador basado en el tipo de 'IValidatable' en lugar de basarse en un Enum? Entonces podría devolver un 'Validator' y tomar una 'T' en el método' GetValidator' y 'T' podría estar restringido a ser' IValidatable' –
'class Validator donde T: IValidatable', no es usted solo quiero 'clase Validator: IValidatable'? –
vulkanino