构造函数链中的占位符?

问题描述

我正在浏览一个材料,自定义验证逻辑的代码如下:-

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;
}

它说,

占位符存在调用继承的FormatErrorMessage方法,将使用属性的显示名称自动格式化字符串。"

我无法想象流程会是什么样子? 我只知道当我输入这个词时,

   [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 中)。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...