2015-03-03 2 views
0

Я пытаюсь расширить CachedDataAnnotationsModelMetadataProvider, чтобы не кэшировать Пользовательский ValidationAttribute. Как я могу достичь этого? Я пробовал смотреть в aspnetwebstack, но это слишком сложно, чтобы получить ответ; Что мне нужно переопределить, так как защищенного переопределениеРасширение CachedDataAnnotationsModelMetadataProvider, чтобы не кэшировать некоторые DataAnnotations

protected override CachedDataAnnotationsModelMetadata CreateMetadataFromPrototype(
      CachedDataAnnotationsModelMetadata prototype, 
      Func<object> modelAccessor) 

и

protected override CachedDataAnnotationsModelMetadata CreateMetadataPrototype(
      IEnumerable<Attribute> attributes, 
      Type containerType, 
      Type modelType, 
      string propertyName) 

И CachedAssociatedMetadataProvider<TModelMetadata> методы

protected sealed override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName) 

запечатан. Есть идеи ?

ответ

0

Моя проблема заключалась в том, что проверки клиентов не обновлялись из-за инициализации свойств в конструкторе. Поэтому я переместил загрузку имущества в

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
{ 
    var userSettings = ServiceLocator.Resolve<UserSettings>(); 
    if (userSettings != null) 
    { 
     // this was the required field to update 
     this.StringLengthAttribute.MinimumLength = userSettings.MinRequiredPasswordLength; 
    } 

    yield return new ModelClientValidationStringLengthRule(this.ErrorMessage, this.StringLengthAttribute.MinimumLength, this.StringLengthAttribute.MaximumLength); 
}