4

为了让我们能够动态控制标签和错误消息,我们创建了一个自定义的DataAnnotationsModelMetadataProvider. 在Display属性中,我们将键存储在Name属性中,并使用自定义DataAnnotationsModelMetadataProvider键替换自定义 CMS 中的字符串值。问题是我们现在有两组值。一种用于 Web 视图,另一种用于移动视图。在运行时,我们检查客户端是否在移动设备上并相应地替换这些值。

在测试运行此设置后,我遇到了一个奇怪的问题。当第AppDomain一次创建并将Name不同数据注释的属性替换为字符串值时,一切正常。在调试中,当我DataAnnotationsModelMetadataProvider第二次输入自定义项时,我看到名称属性已经填充了我替换前一次运行的值。这对我来说很奇怪,因为我的理解是数据注释属性不能在运行时更改。现在似乎某处发生了模型元数据缓存。由于我的自定义解决方案基于每次DataAnnotationsModelMetadataProvider调用时替换值,因此如果可能,我想禁用此缓存。

现在我开始使用该ShortName属性作为我的密钥存储属性并替换该Name属性,这样我可以在每次运行时重新填充字符串。但这不是最初的设计,我没有这样的密钥存储属性ValidationAttributes

那么有没有办法禁用这个缓存呢?为了缓存,我不需要缓存,因为所有 CMS 数据无论如何都缓存在另一层的内存中。

4

0 回答 0