我正在尝试使用基于MetadataProvider
的修改后的CachedDataAnnotationsModelMetadataProvider
。在我的自定义元数据中,我将数据提供给附加值字典。当我从提供程序中查看缓存时,它会使用ModelMetadata
对象正确填充,并且这些对象已正确填充其他值。
在我的自定义提供程序中,我凌驾于:
CreateMetadataPrototype(IEnumerable<Attribute> attributes, Type containerType, Type modelType, string propertyName)
我正在通过字典上的add方法在提供程序中设置值。
但是,当我从View访问ModelMetadata
时,不再填充其他数据。
填充ModelMetadata
中的其他属性,但不填充附加数据字典。
如果我将自定义metadataprovider切换为使用标准DataAnnotations
元数据提供程序而不是缓存提供程序,则会正确填充其他值。
当我深入研究MVC代码时,它看起来好像是方法
CachedDataAnnotationsModelMetadata CreateMetadataFromPrototype(CachedDataAnnotationsModelMetadata prototype, Func<object> modelAccessor)
未完全填充返回的CachedDataAnnotationsModelMetadata对象。
我通过覆盖方法来解决这个问题,但这看起来有点奇怪,让我相信我错误地使用了缓存提供程序。
在缓存的提供程序中处理ModelMetadata
是否有不同的首选方法?
答案 0 :(得分:2)
使用CreateMetadataFromPrototype()
代替CreateMetadataPrototype()