作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个名为 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>
的事实.任何帮助将不胜感激。
最佳答案
您似乎正在使用工厂将枚举参数转换为具体的验证实现。但是我可以想象,虽然调用者不知道或不关心验证器的具体类型,但它大概知道它希望它验证的类型。那应该意味着使 GetValidator 方法成为泛型方法是合理的:
public static Validator<TypeToValidate> GetValidator<TypeToValidate>(ValidationType validationType) where TypeToValidate : IValidatable
然后调用代码如下所示: Validator<IAccount> validator = ValidatorFactory.GetValidator<IAccount>(ValidationType.AccountCreate
)
关于c# - 工厂创建泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9632563/
我是一名优秀的程序员,十分优秀!