gpt4 book ai didi

c# - 工厂创建泛型类

转载 作者:太空狗 更新时间:2023-10-29 23:33:32 25 4
gpt4 key购买 nike

我有一个名为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com