为了让我们能够动态控制标签和错误消息,我们创建了一个自定义的DataAnnotationsModelMetadataProvider
. 在Display
属性中,我们将键存储在Name
属性中,并使用自定义DataAnnotationsModelMetadataProvider
键替换自定义 CMS 中的字符串值。问题是我们现在有两组值。一种用于 Web 视图,另一种用于移动视图。在运行时,我们检查客户端是否在移动设备上并相应地替换这些值。
在测试运行此设置后,我遇到了一个奇怪的问题。当第AppDomain
一次创建并将Name
不同数据注释的属性替换为字符串值时,一切正常。在调试中,当我DataAnnotationsModelMetadataProvider
第二次输入自定义项时,我看到名称属性已经填充了我替换前一次运行的值。这对我来说很奇怪,因为我的理解是数据注释属性不能在运行时更改。现在似乎某处发生了模型元数据缓存。由于我的自定义解决方案基于每次DataAnnotationsModelMetadataProvider
调用时替换值,因此如果可能,我想禁用此缓存。
现在我开始使用该ShortName
属性作为我的密钥存储属性并替换该Name
属性,这样我可以在每次运行时重新填充字符串。但这不是最初的设计,我没有这样的密钥存储属性ValidationAttributes
。
那么有没有办法禁用这个缓存呢?为了缓存,我不需要缓存,因为所有 CMS 数据无论如何都缓存在另一层的内存中。