0

我有一个用 C# 构建的简单工厂,它实例化和配置在 ASP.net 和 JavaScript 中构建的验证器。我想要一种方法来测试我是否意外尝试在同一个控件上设置验证器两次(例如,有两个RequiredValueValidators 不是一个好主意,可能会导致 ui/ux 问题),但我也希望确保保留使用相同构建机制但方式不同的验证器(例如RegularExpressionValidator使用不同 RE 的两个 s,但不是使用相同 RE 的两个)。

我尝试了几种不同的可能技术,我将在下面详细说明这些技术 - 但本质上我需要一种技术来传递关于如何比较相同基本类型的两个验证器以辨别它们是否相等的描述(NB' equal' 不是 'identical',它们可能具有不同的 ID(等),但仍然执行相同的工作。)在运行时可解释并且我的 c# .dll 的其他区域可以访问以实际运行检查。

我的答案将是社区维基,目的是让社区编辑/纠正/讨论我陷入的错误/陷阱,而不是仅仅因为最初不正确而被否决,这样其他人就不会遭受同样的命运.

4

2 回答 2

0

我还尝试在我的工厂中创建一个小型静态开关盒方法,该方法将能够简单地输出另一个由开关盒创建的小型配置类。这本质上比上一个问题要简单得多,但也不是没有问题。例如,我无法正确定义我的返回和参数类型,以便 aRegularExpressionValidator可以在与检查相同的代码块中检查它是否正确ValidDateValidator

于 2013-04-18T16:44:41.820 回答
0

我曾经尝试过的一种尝试是将谓词设置为我的工厂中构建验证器的方法的属性。然后将通过在其他地方使用反射来访问它,然后用于比较两个潜在的验证器。

这方面的一个主要缺陷是您不能将谓词(或代表)设置为属性。

一种可能的解决方法是您提供一个单独的属性(包含谓词委托或IEquatable<>实现,然后检索它 - 但是在比较验证器时需要考虑很多不同的事情(什么类型,配置,它是否依赖于其他控件等等......)所以除非你可以创建一个可以处理不同类型的基类或接口,IEquatable<ValidatorType>这也是不可能的......

于 2013-04-18T16:32:47.243 回答