Mam abstrakcyjne klasy o nazwie Validator:fabryczne do tworzenia klas generycznych
public abstract class Validator<T> where T : IValidatable
{
public abstract bool Validate(T input);
}
i mam kilka konkretnych wdrożeń. Jednym z nich jest AccountValidator:
public class AccountCreateValidator : Validator<IAccount>
{
public override bool Validate(IAccount input)
{
//some validation
}
}
Innym byłoby LoginValidator:
public class LoginValidator : Validator<IAccount>
{
public override bool Validate(IAccount input)
{
//some different validation
}
}
teraz chcę utworzyć fabrykę do zwrotu instancji implementacji walidatora. Coś jak:
public static class ValidatorFactory
{
public static Validator GetValidator(ValidationType validationType)
{
switch (validationType)
{
case ValidationType.AccountCreate:
return new AccountCreateValidator();
}
}
}
bym wtedy lubią robić nazwać jak
Validator myValidator = ValidatorFactory.GetValidator(ValidationType.AccountCreate);
Jednak to nie podoba się nowy AccountCreateValidator powrotną() linię, albo fakt ja deklarując myValidator jako Validator, a nie Validator<SomeType>
. Każda pomoc będzie doceniona.
Kod, który masz, jest obecnie nieprawidłowy - koniec metody jest osiągalny. Pokaż krótki, ale kompletny program demonstrujący problem. –
Czy nie byłoby lepiej uzyskać walidatora na podstawie typu 'IValidatable' zamiast opartego na Enum? Następnie możesz zwrócić 'Validator' i wziąć 'T' w metodzie' GetValidator', a 'T' może być ograniczone do' IValidatable' –
'Validator klasy gdzie T: IValidatable', to nie ty po prostu chcesz 'class Validator: IValidatable'? –
vulkanino