动态注释/属性值

时间:2015-06-17 11:39:28

标签: c# validation annotations attributes

我在c#中使用数据注释遇到了问题。我正在使用自定义必需和范围属性,我想将对象设置为错误消息。

[MyOwnRequired(ErrorCode=GlobalMessages.Message01]
public string Description { get; set; }

问题是我有一个包含多个对象的类(GlobalMessages.Message01,每个对象都包含一条消息和一个代码),以便在整个应用程序中转换不同的错误消息。

正如一些文章所述,不可能将非常量表达式用作数据注释/属性。我不能使用枚举来解决这个问题,因为我需要在枚举(继承)不允许的不同项目中扩展错误消息。我也不想将ErrorCode用作String,因为我想在每个属性上看到消息(悬停)。

有没有人能解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

一切都是真的。你不能。尽管你写过你不能使用枚举,但这实际上可以提供解决方案:

将enum参数传递给属性在属性构造函数的逻辑/算法中使用此参数来实现扩展逻辑。

注意:这与某些DP完全相反,所以我们可以安全地将其称为反模式,但这里没有其他选择。

如果这是项目中一个重要且冗长的部分,那么在这里使用反模式可能会成为生产力的杀手。在这种情况下,您还可以使用代码生成生成属性的部分部分,并根据项目中的某些更改自动在构造函数中生成巨大的开关(及其逻辑)。这消除了反模式的大多数实际缺点。 (好吧,它仍然是丑陋的)这个案例的推荐工具是T4,它有广泛的支持。