有没有办法避免注释属性中的幻数?

时间:2013-01-07 09:31:10

标签: c# .net asp.net-mvc c#-4.0

我使用MVC Foolproof Validation

中的RequiredIf属性在不同的实例中使用此代码
[Display(Name = "ID Number")]
[RequiredIf("CitizenshipId", 1)]
public string IdNumber { get; set; }

但我真正想要的是

[RequiredIf("CitizenshipId", GetId("SA Citizen")]

现在,正如我认为其他开发人员所希望的那样,是消除神奇的数字1到目前为止,我想到的只是查找函数参数的字符串名称,函数必须查找。将1变为“1”是非常糟糕的。

注意:这里的常量并不理想,因为幻数abovr指的是数据库的PK。我认为这也不理想,我应该为每个查找条目添加一个带有“常量代码”的第三列,所以不管文本是什么,无论文本是什么,我们仍然有一个不可变的值。

NB注意:我在Orchard工作,所以与自定义提供商没有任何有趣的业务。

2 个答案:

答案 0 :(得分:3)

我使用了FluentValidator,它比属性更灵活。绝对容易测试。

答案 1 :(得分:2)

最好的办法是使用常数。

  1. 无法更改现有属性。
  2. 对于属性,不支持泛型。
  3. 无法使用Lambda表达式,因为属性构造函数(和属性)可能只包含常量表达式