我有一个名为 ValidationMethods 的类中的 Func 列表。我通过将它们传递给 Validator.Validate(Func) 在 Validator 类中使用它们。我想知道是否有一种方法可以包装每个函数,以便我可以重载 Validate 以获取 IEnumerable 并指定要根据某个枚举值过滤的 where 类。
我这样做是为了使 API 更紧密地遵循打开/关闭原则,其中验证器可以在需要时接受更多验证类型,而无需修改验证器。
我有一个名为 ValidationMethods 的类中的 Func 列表。我通过将它们传递给 Validator.Validate(Func) 在 Validator 类中使用它们。我想知道是否有一种方法可以包装每个函数,以便我可以重载 Validate 以获取 IEnumerable 并指定要根据某个枚举值过滤的 where 类。
我这样做是为了使 API 更紧密地遵循打开/关闭原则,其中验证器可以在需要时接受更多验证类型,而无需修改验证器。
我希望我能正确理解你。你想要一个枚举来过滤函数:
enum Category {
F1,
F2
}
然后是每个函数的包装器:
class FWrap<TIn, TOut> //depending on your arities
{
public Func<TIn, TOut> Fnc {get; set;}
public Category Cat {get; set;}
//some constructor and stuff
}
之后,应该没有任何问题:
IEnumerable<FWrap<t1,t2>> funcs = getFuncs();
validators = funcs.Where(f => f.Cat == Category.F1)
等等...我希望这就是你所期望的。