У меня есть абстрактный класс Validator:Factory создать общие классы
public abstract class Validator<T> where T : IValidatable
{
public abstract bool Validate(T input);
}
И у меня есть несколько конкретных реализаций. Одним из них является AccountValidator:
public class AccountCreateValidator : Validator<IAccount>
{
public override bool Validate(IAccount input)
{
//some validation
}
}
Еще бы LoginValidator:
public class LoginValidator : Validator<IAccount>
{
public override bool Validate(IAccount input)
{
//some different validation
}
}
Теперь я хочу, чтобы создать фабрику, чтобы вернуть экземпляр реализации валидатора. Что-то вроде:
public static class ValidatorFactory
{
public static Validator GetValidator(ValidationType validationType)
{
switch (validationType)
{
case ValidationType.AccountCreate:
return new AccountCreateValidator();
}
}
}
я тогда хотел бы сделать называть это как
Validator myValidator = ValidatorFactory.GetValidator(ValidationType.AccountCreate);
Однако это не нравится возвращение нового AccountCreateValidator() линию, или тот факт, я объявляю myValidator, как Валидатор, а не Validator<SomeType>
. Любая помощь будет оценена по достоинству.
Код, который у вас есть, в настоящее время недействителен - конец метода доступен. Пожалуйста, покажите короткую, но полную программу, которая демонстрирует проблему. –
Не могли бы вы лучше получить валидатор, основанный на типе 'IValidatable', а не на основе Enum? Затем вы можете вернуть 'Validator' и взять' T' в методе 'GetValidator', а' T' может быть ограничено значением 'IValidatable' –
' class Validator, где T: IValidatable', это не значит, что вы просто нужно 'class Validator: IValidatable'? –
vulkanino