Фабрика для создания универсальных классов

У меня есть абстрактный класс Validator:

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); 

Однако ему не нравится строка return new AccountCreateValidator() или тот факт, что я объявляю myValidator как Validator, а не Validator< SomeType>. Любая помощь будет оценена по достоинству.

5
задан Sam Holder 9 March 2012 в 10:47
поделиться