构造函数链接中的占位符?

Placeholder in constructor chaining?

我正在经历一个material,自定义验证逻辑的代码如下:-

public class MaxAttribute : ValidationAttribute
{
   public MaxAttribute(int maxWords) : base("{0} has too many words.")
   {
       _maxWords = maxWords;
   }
   public override ValidationResult IsValid(object value, ValidationContext validationContext)
   {
       if(value != null)
       {
         var valueAsString = value.ToString();
         if(valueAsString.Split(' ').Length > _maxWords)
         {
           var errorMessage = FormatErrorMessage(validationContext.DisplayName);
           return new ValidationResult(errorMessage);
         }
       }
       return ValidationResult.Success;
   }
       private readonly int _maxWords;
}

它说,

The placeholder exists the call to the inherited FormatErrorMessage method, will automatically format the string using the display name of the property."

我无法想象流程会怎样? 我所知道的是当我输入这个时说,

   [MaxWords(10)]
   public string Name{get;set}

将调用 MaxWordsAttribute(int maxWords) 构造函数,这将调用基础构造函数 :base({0}...) 何时以及如何调用 FormatErrorMessage 将填充占位符?

要查看的地方是对 FormatErrorMessage 的调用:这是构造错误消息的地方。所以 let's take a look:

public virtual string FormatErrorMessage(string name) =>
    string.Format(CultureInfo.CurrentCulture, ErrorMessageString, name);

ErrorMessageString 是您传递给基本构造函数的字符串(在 slightly roundabout way 中)。