首页 > 解决方案 > 从自定义数据注释属性访问 IConfiguration

问题描述

我目前正在尝试将我公司的开发框架从 .NET 框架 4.7 转换为 .NET 5。

在旧代码中,有一系列从 System.ComponentModel.DataAnnotations.RegularExpressionAttribute 继承的自定义验证属性。

这些都有以下行为

  1. 检查配置文件中是否指定了正则表达式
  2. 如果指定了正则表达式,则将其传递给基类
  3. 如果未指定正则表达式,则将硬编码的正则表达式传递给基类。

如何从 .NET 5 中的数据注释验证属性内部访问配置。

我知道我可以在所有验证属性上创建一个静态配置方法,并在应用程序启动时手动注入 IConfiguration 但这似乎笨拙且不优雅,所以我希望有更好的方法。

我宁愿每次使用属性时都不必将配置文件中的值作为参数传递,因为这在某种程度上违背了我们自定义正则表达式验证属性的要点,并且还增加了某人犯错误并传递不正确的可能性属性中的值。

在 .NET 框架版本中,对配置文件的访问是使用配置管理器完成的。在 .NET 5 中,这并不是一个真正的选择(因为我正试图从 *.config 文件转移到 .NET 核心更灵活的系统)

我已经搜索了如何注入 ASP.Net 核心属性,但我发现的所有结果似乎都与 Actionfilter 和 ServiceFilter 相关,这似乎与 Data Annotation Attributes 没有太大的相关性

标签: c#.net-coredependency-injectionattributes.net-5

解决方案


您可以尝试以下变体:

var config = (IConfiguration)validationContext.GetService(typeof(IConfiguration));


推荐阅读