.net core 无法解析自定义ValidationAttribute中的依赖项,ValidationConContext参数上的IServiceProvider设置为null
一个ASP.NET Core 2.1 MVC应用程序,使用Autofac,遵循其关于安装()的文档 我正在尝试解决自定义ValidationAttribute中的依赖项。valicationContext.GetService返回的值始终返回null。检查私有成员serviceProvider的ValidationContext始终为空 我在设置中遗漏了什么,但这不起作用。依赖关系在应用程序的其他任何地方都可以解决,只是在ValidationAttribute中不能解决.net core 无法解析自定义ValidationAttribute中的依赖项,ValidationConContext参数上的IServiceProvider设置为null,.net-core,dependency-injection,autofac,asp.net-core-2.1,validationattribute,.net Core,Dependency Injection,Autofac,Asp.net Core 2.1,Validationattribute,一个ASP.NET Core 2.1 MVC应用程序,使用Autofac,遵循其关于安装()的文档 我正在尝试解决自定义ValidationAttribute中的依赖项。valicationContext.GetService返回的值始终返回null。检查私有成员serviceProvider的ValidationContext始终为空 我在设置中遗漏了什么,但这不起作用。依赖关系在应用程序的其他任何地方都可以解决,只是在ValidationAttribute中不能解决 public class
public class MyCustomAttribute : ValidationAttribute
{
public MyCustomAttribute ()
{
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
// THIS IS ALWAYS RETURNING NULL
var IMyService service = (IMyService)validationContext.GetService(typeof(IMyService));
return ValidationResult.Success;
}
}
我不能说我以前尝试过这个,但在进行一些搜索时,我发现这似乎表明应该始终填充服务提供者(不是
ServiceContainer
属性,而是响应GetService
调用的服务提供者)。诚然,这是从.NETCore早期的存档回购协议中获得的,但它应该仍然有效
查看一下,我发现privateserviceProvider
字段实际上是一个需要在某处实例化的函数;它实际上并不是对提供者的引用。这意味着如果它为null,则会发生以下两种情况之一:
ValidationContext
的ASP.NET核心路径没有传入提供服务所需的IServiceProvider
- 该属性正被运行在“ASP.NET管道”之外的东西使用——比如手动调用的验证,或者可能是在应用程序启动时没有请求的东西
- 在完整管道无效的测试中使用该属性
最后,如果我没有提到在像这样的属性中手动解析服务在技术上是服务位置,而不是依赖项注入,那么我将是失职的。如果您完全避免,这将是一个更好的全面解决方案。尽管Autofac的原理也适用,但我们将介绍如何使用简单的喷油器解决此问题。设置模型验证器并使用模型验证器提供程序而不是属性可能是一种更好、更易测试的方法。这个问题的答案对此有更多的解释。我不能说我以前尝试过这个,但在进行一些搜索时,我发现这似乎表明服务提供者(不是
ServiceContainer
属性,而是将响应GetService
调用的服务提供者)应该始终被填充。诚然,这是从.NETCore早期的存档回购协议中获得的,但它应该仍然有效
查看一下,我发现privateserviceProvider
字段实际上是一个需要在某处实例化的函数;它实际上并不是对提供者的引用。这意味着如果它为null,则会发生以下两种情况之一:
ValidationContext
的ASP.NET核心路径没有传入提供服务所需的IServiceProvider
- 该属性正被运行在“ASP.NET管道”之外的东西使用——比如手动调用的验证,或者可能是在应用程序启动时没有请求的东西
- 在完整管道无效的测试中使用该属性