【发布时间】:2012-03-09 10:31:42
【问题描述】:
我有一个名为 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>。
任何帮助将不胜感激。
【问题讨论】:
-
您获得的代码当前无效 - 可以到达方法的结尾。请展示一个简短但完整的程序来演示该问题。
-
基于
IValidatable的类型而不是基于枚举的验证器不是更好吗?然后你可以返回一个Validator<T>并在GetValidator方法中采用T并且T可以被限制为IValidatable -
class Validator<T> where T : IValidatable,你不就是想要class Validator : IValidatable吗? -
抱歉,之前不清楚。我想为同一个 IValidatable 设置多个验证器。例如,AccountCreateValidator 和 LoginValidator 都将针对 IAccount 进行验证
标签: c# generics factory-pattern fluentvalidation