Я пытаюсь использовать модифицированный MetadataProvider
на основе CachedDataAnnotationsModelMetadataProvider
. В своих пользовательских метаданных я предоставляю данные в словарь дополнительных значений. Когда я смотрю на кэш из провайдера, он правильно заполняется объектами ModelMetadata
, и эти объекты правильно заполняются дополнительными значениями.
В моем обычном провайдере я переопределяю:
CreateMetadataPrototype(IEnumerable<Attribute> attributes, Type containerType, Type modelType, string propertyName)
и я устанавливаю значения в провайдере с помощью метода add в словаре.
Однако, когда я получаю доступ к ModelMetadata
из представления, дополнительные данные больше не заполняются.
Другие свойства в ModelMetadata
заполняются, но словарь дополнительных данных - нет.
Если я переключу пользовательский поставщик метаданных на использование стандартного поставщика метаданных DataAnnotations
вместо поставщика кэширования, дополнительные значения будут правильно заполнены.
Когда я углубляюсь в код MVC, кажется, что метод
CachedDataAnnotationsModelMetadata CreateMetadataFromPrototype(CachedDataAnnotationsModelMetadata prototype, Func<object> modelAccessor)
не полностью заполняет возвращаемый объект CachedDataAnnotationsModelMetadata.
Я исправляю это, переопределяя метод, но это кажется немного странным и наводит меня на мысль, что я неправильно использую провайдер Cached.
Так есть ли другой предпочтительный способ обработки ModelMetadata
в кэшированном провайдере?