从自定义数据注释属性访问 IConfiguration
Accessing IConfiguration from a custom Data Annotation attibute
我目前正在尝试将我公司的开发框架从 .NET Framework 4.7 转换为 .NET 5。
在旧代码中有一系列继承自 System.ComponentModel.DataAnnotations.RegularExpressionAttribute 的自定义验证属性。
这些都有以下行为
- 检查配置文件中是否指定了正则表达式
- 如果指定了正则表达式,则将其传递给基数 class
- 如果未指定正则表达式,则将硬编码正则表达式传递给基 class。
如何从 .NET 5 中的数据注释验证属性内部访问配置。
我知道我可以在所有验证属性上创建一个静态 Configure 方法并在应用程序启动时手动注入 IConfiguration 但这看起来笨拙且不优雅,所以我希望有更好的方法。
我不想每次使用该属性时都必须将配置文件中的值作为参数传递,因为这在某种程度上违背了我们自定义正则表达式验证属性的要点,并且还增加了某人制作错误并将不正确的值传递给属性。
在 .NET Framework 版本中,对配置文件的访问是通过配置管理器完成的。在 .NET 5 中,这并不是一个真正的选择(因为我正试图从 *.config 文件转移到 .NET 核心的更灵活的系统)
我搜索了如何注入 ASP.Net 核心属性,但我发现的所有结果似乎都与 Actionfilter 和 ServiceFilter 相关,它们似乎与数据注释属性没有太大关系
您可以试试这个的变体:
var config = (IConfiguration)validationContext.GetService(typeof(IConfiguration));
我目前正在尝试将我公司的开发框架从 .NET Framework 4.7 转换为 .NET 5。
在旧代码中有一系列继承自 System.ComponentModel.DataAnnotations.RegularExpressionAttribute 的自定义验证属性。
这些都有以下行为
- 检查配置文件中是否指定了正则表达式
- 如果指定了正则表达式,则将其传递给基数 class
- 如果未指定正则表达式,则将硬编码正则表达式传递给基 class。
如何从 .NET 5 中的数据注释验证属性内部访问配置。
我知道我可以在所有验证属性上创建一个静态 Configure 方法并在应用程序启动时手动注入 IConfiguration 但这看起来笨拙且不优雅,所以我希望有更好的方法。
我不想每次使用该属性时都必须将配置文件中的值作为参数传递,因为这在某种程度上违背了我们自定义正则表达式验证属性的要点,并且还增加了某人制作错误并将不正确的值传递给属性。
在 .NET Framework 版本中,对配置文件的访问是通过配置管理器完成的。在 .NET 5 中,这并不是一个真正的选择(因为我正试图从 *.config 文件转移到 .NET 核心的更灵活的系统)
我搜索了如何注入 ASP.Net 核心属性,但我发现的所有结果似乎都与 Actionfilter 和 ServiceFilter 相关,它们似乎与数据注释属性没有太大关系
您可以试试这个的变体:
var config = (IConfiguration)validationContext.GetService(typeof(IConfiguration));