我有一个用C#构建的简单工厂,用于实例化和配置使用ASP.net和JavaScript构建的验证器。我想要一种方法来测试我是否意外地尝试在同一个Control上设置两次验证器(例如,有两个RequiredValueValidator
s不是一个好主意并且可能导致ui / ux问题),但我也是希望确保使用相同构建机制但以不同方式保留的验证器(例如两个RegularExpressionValidator
使用不同的RE,但不两个使用相同的RE。)
我已经尝试了一些不同的可能技术,我将在下面详细解释这些 - 但实质上我需要一种技术来传递关于如何比较相同基类型的两个验证器的描述,以辨别它们是否相等( NB'相等'不是'相同',它们可能有不同的ID(等等),但仍然可以完成相同的工作。)可以在运行时解释并可以访问我的c#.dll的其他区域检查。
我的答案将是社区维基,意图是我所陷入的错误/陷阱将被社区编辑/纠正/讨论,而不仅仅因为最初不正确而被投票,所以别人不会遭受同样的命运。
答案 0 :(得分:0)
我尝试过的一种尝试是将谓词设置为我工厂中构建验证器的方法的属性。然后可以通过在其他地方使用反射来访问它,然后用于比较两个潜在的验证器。
这方面的一个主要缺陷是您无法将谓词(或代理人)设置为属性。
A possible work-around是您提供单个属性(包含谓词委托或IEquatable<>
实现,然后检索它)的地方 - 但是在比较验证器时需要考虑很多不同的事情(什么类型,配置,它依赖于其他控件等....)所以除非你可以创建一个可以处理不同类型的IEquatable<ValidatorType>
的基类或接口,这也是不可能的......
答案 1 :(得分:0)
我还尝试在我的工厂中创建一个小的静态开关案例方法,该方法将能够简单地输出由switch case创建的另一个小配置类。这实质上比前一个问题简单得多,但它并非没有问题。例如,我无法正确定义我的返回和参数类型,以便RegularExpressionValidator
可以在与ValidDateValidator
检查相同的代码块中检查它是否正确。